我想为我的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
是,如果绑定属性,因为我们使用if
的boundIf
版本(这就是我刚才所说的),所以用于更改模板,如果属性更改。
该解决方案的问题是,该imho可能是最接近正确的是该属性计算不正确,助手打印总是错误的值。 我调试了很多而没有使其工作,所以任何帮助将非常感激,我希望这可能对其他人有用。
试过,但我得到'TypeError:key.indexOf不是一个函数',除此之外,我想解决使用把手的问题而不是HTMLBars,但非常感谢您的回答! – AndreaScn
你没有把手。 Ember转移到'1.10' AFAIK的HTMLBars。你从来都没有!而你的错误没有帮助。可能它或者是你的帮手或者代码中的其他地方出了问题。我试过了上面的代码。 – Lux