3

テンプレートで単純な配列を反復処理しています:

{{#each chapter in chapterList}}
  <li>{{ chapter }} {{ test chapter }}</li>
{{/each}}

chatperListこれが、たとえば、[1, 2, 3, 4, 5]です。Handlebars ヘルパーを作成しました。

Ember.Handlebars.registerHelper('test', function(chapter) {
  return this.get('list.selectedChapter') == chapter
    ? 'selected'
    : '';
});

ただし、chapterヘルパー関数の変数は単なる文字列「chapter」です。実際の変数自体にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

これは Ember のバグのようです (まだ最新の v1.0 にあります) ... #each 内のヘルパーに変数を渡すことができないか、次のようになります:-

TypeError: Object.defineProperty called on non-object

options.data の内容を使用して回避策を見つけましたが、#each 内にある場合は、渡すオブジェクトを引用する必要があることを意味します (以下の色ではなく「色」に注意してください)。

テンプレート:

<ul>
  <li>{{helpme color 'lorry'}}</li>

{{#each color in model}}
  <li>{{helpme 'color' 'lorry'}}</li>
{{/each}}
</ul>

ヘルパー:

Ember.Handlebars.helper('helpme', function (color, vehicle, opts) {
    var str = color;
    if (typeof opts.data.keywords[color] === 'string') {
        str = opts.data.keywords[color];
    }
    return new Ember.Handlebars.SafeString(str + '_' + vehicle);    
});

...私のJSFiddleを見てください

編集: Ember の古いバージョンはEmber.Handlebars.registerHelper()代わりに 使用しますEmber.Handlebars.helper()

于 2013-09-13T13:36:37.027 に答える
1

バインドされたヘルパーが必要な場合は、代わりにEmber.Handlebars.registerBoundHelperwhich にエイリアスされているものを使用する必要がありますEmber.Handlebars.helper

Ember.Handlebars.helper('test', function(chapter) {
  return this.get('list.selectedChapter') == chapter ? 'selected' : '';
});
于 2013-07-28T11:30:26.487 に答える