在我的模板中,我正在遍历模型中的数组。 为简单起见,我将使用以下示例:
{{#each user in appModel.users}}
现在,如果用户在某个组中,我正在尝试显示user
的元素。
我有App.Group
作为模型,它有一个检查用户是否在组中的方法。此方法采用参数user。
所以,
{{group.has_user user}}
如果group
是App.Group
的特定实例,如果在组的ID列表中找到用户的ID,则返回true或false。
我试图找到一种方法将此方法用作模板条件。像这样:
{{#if group.has_user user}}
<block>
{{/if}}
把它们放在一起:
{{#each user in appModel.users}}
{{#if group.has_user user}}
<block displaying user data>
{{/if}}
{{/each}}
因此,将实现显示该组用户的期望效果。问题是条件{{#if}}
帮助器不能使用该方法获取参数。
我尝试使用自定义寄存器助手,但我找不到传递模型属性的方法。如果我在模板中使用了这样的帮助:
{{#ifUserInGroup user.id group.id}}
我会将字符串'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...
});
如果有人知道在条件中使用该方法的方法,或者如何将实际值传递给帮助者,请帮助我。
谢谢。
答案 0 :(得分:6)
编辑:从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);
}
});
使用该函数,我可以获得实际的绑定数据,而不是传递给帮助程序的字符串。
所以,
{{#each user in users}}
{{#ifUserInGroup user.id some_group.id}}
<block displaying user data>
{{/ifUserInGroup}}
{{/each}}
其中users
是应用模型的数组属性,而some_group
是应用模型的App.Group
实例属性,会为该组中的每个用户显示一个块
答案 1 :(得分:-1)
尝试下面的代码,让我知道它是否有效。
{{#each group in model}}
{{#if group.has_user}}
<block>
{{/if}}
{{else}]
<block>
{{/each}}
然后在模型类中,检索这样的数据。
App.YourModelClass = Ember.Model.extend({
has_user:function(){
var value = this.get('user');
}
});
您还可以使用valueBinding
属性将属性绑定到模型类,如下所示。
{{view Ember.TextField valueBinding="yourProp"}}
按要求更新
以下是模板更改...
{{#ifUserInGroup user group}}
yes
{{else}}
no
{{/ifUserInGroup}}
以下是您的车把帮助。
Handlebars.registerHelper('ifUserInGroup', function (user, group, options) {
if (typeof group[user] != 'undefined') {
return options.fn(this);
} else {
return options.inverse(this);
}
});
以下是小提琴。 http://jsfiddle.net/R8u6g/12/