EmberJS - 带参数的条件模板

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)

如果有人知道在条件中使用该方法的方法,或者如何将实际值传递给帮助器,请帮助我.

谢谢.

Mic*_*lia 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);
    }
});
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 usersapp some_group是app模型的数组属性,是app模型的App.Group实例属性,它将为组中的每个用户显示一个块.