Mic*_*lia 1 conditional templates helpers ember.js
在我的模板中,我正在遍历模型中的数组.为简单起见,我将使用以下示例:
{{#each user in appModel.users}}
Run Code Online (Sandbox Code Playgroud)
现在,我试图显示user
用户是否在某个组中的元素.我有App.Group
一个模型,它有一个方法来检查用户是否在组中.该方法采用参数user.
所以,
{{group.has_user user}}
Run Code Online (Sandbox Code Playgroud)
如果在组的ID列表中找到用户的ID,则返回true或false group
的特定实例在哪里App.Group
.
我试图找到一种方法来使用此方法作为模板条件.像这样:
{{#if group.has_user user}}
<block>
{{/if}}
Run Code Online (Sandbox Code Playgroud)
把它们放在一起:
{{#each user in appModel.users}}
{{#if group.has_user user}}
<block displaying user data>
{{/if}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
因此,将实现显示该组用户的期望效果.问题是条件{{#if}}
帮助器不能使用该方法获取参数.
我试图使用自定义寄存器助手,但我找不到传递模型属性的方法.如果我在模板中使用了这样的帮助:
{{#ifUserInGroup user.id group.id}}
Run Code Online (Sandbox Code Playgroud)
我会把字符串'user.id'和'group.id'作为传递的参数.助手的写法如下:
Ember.Handlebars.registerHelper('ifUserInGroup', function(val1, val2, options){
//This is where I would get the models, but val1 and val2 are strings, not id's...
});
Run Code Online (Sandbox Code Playgroud)
如果有人知道在条件中使用该方法的方法,或者如何将实际值传递给帮助器,请帮助我.
谢谢.
编辑:从ember版本1.0开始,此解决方案不再起作用.
为了在我的原始职位上建立我的注册帮助,并在Vinothbabu的帮助下,我设法得到了一些工作.
我失踪了,是 Ember.Handlebars.get(root, path, options)
Ember.Handlebars.registerHelper('ifUserInGroup', function(user, group, options){
user = Ember.Handlebars.get(this, user, options);
group = Ember.Handlebars.get(this, group, options);
if (group.has_user(user)) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
Run Code Online (Sandbox Code Playgroud)
使用该函数,我可以获得实际的绑定数据,而不是传递给帮助器的字符串.
所以,
{{#each user in users}}
{{#ifUserInGroup user.id some_group.id}}
<block displaying user data>
{{/ifUserInGroup}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
where users
app some_group
是app模型的数组属性,是app模型的App.Group
实例属性,它将为组中的每个用户显示一个块.