1

どうやらこれは機能しません: http://jsbin.com/efapob/3/edit

Ember.Handlebars.registerHelper('foo', function(options) {
  var result = 'BEFORE '
           + options.fn(this)
           + ' AFTER';
  return new Handlebars.SafeString(result);
});

fn() が出力バッファに直接書き込むためだと思います。

ただし、ブロックのコンテンツの出力を直接処理する方法が必要です。

ビューの関数を上書きしようとしましrenderたが、それも私をどこにも導きませんでした。

(背景: 最後の呼び出しと比較してコンテンツが変更された場合にのみレンダリングするヘルパー ブロックを作成しようとして{{#ifchanged}}います。ユース ケースは、モデルの 1 つのプロパティが最後のものと異なるたびに何かを表示する必要があるループです。 . これを実現する方法について他にアイデアがあれば、コメントをいただければ幸いです!)

4

2 に答える 2

1

誰かが興味を持っている場合は、この特定のユースケースで、fn()次のようなリターンを使用できないという問題を回避しました。

var ifchanged_last;
Ember.Handlebars.registerHelper('ifchanged', function(property, options) {
  var value = Ember.Handlebars.get(this, property);
  if (value !== ifchanged_last) {
    options.fn(this, options);
  }
  ifchanged_last = value;
  return;
});

テンプレート:

{{#each content}}
  {{#ifchanged some_key}}
    The value changed
  {{/ifchanged}}
{{/each}}

改善の余地は大きいが、使用可能な出発点。

于 2013-09-11T15:30:04.510 に答える
0

isDirtyプロパティ fromを使用DS.Modelして、データがいつ変更されたかを知ることができます。

いくつかのテンプレートで:

{{#if isDirty}}
    You changed the model<br/>
{{/if}}

そして、デモのjsfiddle

于 2013-08-07T00:11:38.097 に答える