Ember 어플 리케이션을위한 새로운 조건부 도우미를 빌드하려고합니다. 중요한 것은 Ember 1.10.1에서 Handlebars 2.0을 사용하고 있는데 업그레이드 할 수 없다는 것이 Ember의이 버전의 문제를 해결하는 데 큰 도움이된다는 것입니다. 여기에 글을 쓰기 전에 다른 솔루션을 시도하고 Ember 코드를 많이 디버깅했습니다. 솔루션에 가깝지만 뭔가 빠졌습니다.조건부 Ember 도우미 작성
Ember.Handlebars.registerHelper('helperName', function(conditional, options) {
if(conditional) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
그리고 여기 템플릿 :
{{#helperName booleanCondition}}
print true
{{else}}
print false
{{/helperName}}
모두가 fn
함수를 호출 잘 작동하지만 inversion
기능 (모든
첫째, 나는 다음과 같은 접근 방식은 핸들 설명서를 읽는 시도 else 브랜치의 템플릿을 렌더링하는 데 사용됨)는 실제로 함수가 아닌 객체였습니다.
는 다음 나는 엠버 코드를 디버깅을 시작하고 난 엠버가 if
도우미와 함께 사용하는 것과 동일한 접근 방식을 따르려고, 그래서 나는 다음과 같이 결국 :
Ember.Handlebars.registerHelper('helperName', function(condition, options) {
var permission = Ember.Object.extend({
can: Ember.computed(function() {
return condition;
})
}).create();
Ember.Handlebars.helpers.boundIf.helperFunction.call(this, ["can"], permission, options, options.data.buffer);
});
can
이 경우에 바인딩 된 속성입니다 , 속성이 변경되면 템플릿을 변경하는 데 사용됩니다. 이는 boundIf
버전 인 if
(방금 말한 것)을 사용하고 있기 때문입니다.
imho가 가장 정확할 수있는이 솔루션의 문제점은 속성이 올바르게 계산되지 않고 도우미가 항상 false 값을 인쇄한다는 것입니다. 나는 정말 많은 일을하지 않고 디버깅을했기 때문에 어떤 도움을 주시면 매우 감사하겠습니다. 다른 사람에게도 유용 할 수 있기를 바랍니다.
시도해 봤지만'TypeError : key.indexOf는 함수가 아닙니다 .' 이외에는 핸들 바를 사용하여 문제를 해결하고 싶습니다. HTMLBars가 아니지만 답변에 많은 감사를드립니다! – AndreaScn
핸들 바가 없습니다. Ember는 '1.10' AFAIK에서 HTMLBars로 옮겼습니다. 당신은 결코 둘 다! 그리고 당신의 실수는 도움이되지 않습니다. 아마도 당신의 도우미와 함께 뭔가 잘못되었거나 코드의 다른 부분 일 것입니다. 위의 코드를 시도했습니다. – Lux