1

繰り返し処理したい属性名のリストがありattrs、モデルごとにその属性へのバインディングを使用して入力を作成します。以下は、私が求めている機能を表しています。

{{#each attr in attrs}}
  {{input value=model.get(attr) }}
{{/each}}

もちろん、ヘルパーでメソッド呼び出しを行うことはできないため、これは実際には機能しません。この質問を見つけましたが、私のバージョンの Ember (1.11.0) では解決策が機能しません。thisバージョン 1.11.0 のヘルパー定義で定義されていないため、収集します (こちらを参照)。

どうすればこれを機能させることができますか?

4

1 に答える 1

1

各ループの現在の値によって名前が付けられたモデルからプロパティを取得するだけの場合は、次のようなヘルパーを記述できます。

Ember.Handlebars.helper('input-helper',
    function(model, attr) {
        return Ember.get(model, attr);
    }
);

そして、次のように使用します。

{{#each attr in attrs}}
    {{input-helper model attr}} 
{{/each}}

これは、その反復でattr保持されるものに名前が付けられたプロパティを#eachmodel

ヘルパーを作成する代わりに、その値を入力にバインドしたい場合は、これを行うコンポーネントまたはビューを作成できます。

// component that binds 'object.property' to an input field
var InputBinderComponent = Ember.Component.extend({
  prop: null, // passed in
  obj: null,   // passed in
  value: null,    // local

  onValue: function() {
    var obj = this.get('obj');
    var prop = this.get('prop');
    var value = this.get('value');
    Ember.set(obj, prop, value);
  }.observes('value'),
});

input-binderコンポーネントのテンプレートに実際に入力を含める場合:

{{input type="text" value=value}}

そして、それをテンプレートで使用します。

{{#each attr in attrs}}
      {{input-binder prop=attr obj=model}}
{{/each}}  

ここに例があります

于 2015-03-31T17:49:11.917 に答える