1

テンプレート内で、モデル内の配列を反復処理しています。簡単にするために、次の例を使用します。

{{#each user in appModel.users}}

今、userユーザーが特定のグループに属しているかどうかの要素を表示しようとしています。私はApp.Groupモデルとして、ユーザーがグループに属しているかどうかを確認する方法を持っています。このメソッドはパラメーター user を取ります。

そう、

{{group.has_user user}}

Wheregroupは の特定のインスタンスであり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...
});

メソッドを条件付きで使用する方法、または実際の値をヘルパーに渡す方法を誰かが知っている場合は、助けてください。

ありがとうございました。

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 に答える