我有一个控制器对象,如下所示:
MyApp.objController = Ember.ArrayController.create({
init: function(data) {
data.isValid = function() {
return (data.validity === "valid");
}
this.pushObject(MyApp.MyObj.create(data));
}
});
我的看法是这样的:
{{#each MyApp.objController}}
{{#if isValid}}
<some markup>
{{else}}
<some other markup>
{{/if}}
{{/each}}
我当时假设if
Handlebars 中的条件接受值和函数,但情况似乎并非如此。这真的可能吗?我只是做错了?
Handlebars if 语句仅比较某个值是否存在以及该值是否为假值(即不存在、0、空字符串等)。您必须编写自定义辅助函数。
你可以这样做
Handlebars.registerHelper('isValid', function (value, options) {
if (value == "valid") {
return options.fn(this);
}
return options.inverse(this);
});
这会注册一个块助手。如果您传入的值评估为“有效”,它将返回带有当前数据的助手后面的模板。如果它的评估结果不有效,它将返回 else 语句后面带有当前数据的模板。
然后在你的模板中你可以像这样使用它
{{#each MyApp.objController}}
{{#isValid validity}}
<some markup>
{{else}}
<some other markup>
{{/isValid}}
{{/each}}
否则,如果您想遵循 Handlebars 的精神并执行“无逻辑”模板,请在渲染模板之前设置一个标志,指示该数据是否有效,然后使用带有该标志的 Handlebars if helper。
您还可以设置一个通用函数来处理这种情况和其他情况。请参阅我的回答handlebars.js {{#if}} 条件中的逻辑运算符 https://stackoverflow.com/questions/8853396/logical-operator-in-a-handlebars-js-if-conditional/9405113#9405113通用 if 的示例(类似于上面的答案)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)