1

在我的模板中,我正在迭代模型中的一个数组。为简单起见,我将使用以下示例:

{{#each user in appModel.users}}

现在,我正在尝试显示user用户是否在某个组中的元素。我有App.Group一个模型,它有一种检查用户是否在组中的方法。这个方法有一个参数,用户。

所以,

{{group.has_user user}}

group如果在组的 ID 列表中找到用户 ID,则 , 的特定实例在哪里App.Group将返回 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...
});

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

谢谢你。

4

2 回答 2

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_groupApp.Group实例属性,将为组中的每个用户显示一个块。

于 2013-10-02T22:49:20.760 回答
-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/

于 2013-09-15T21:17:22.227 回答