質問

私は日付/時刻のフォーマットヘルパーを持っていますが、それが生成するものは、基礎となるプロパティが変更されたときに更新されません。これは驚きではありませんが、ヘルパーでバインディングを生産する方法を知っている人はいますか?

私はこのようにヘルパーを呼び出します...

{{timestamp created_at}}

...そしてここにヘルパー自体があります:

Handlebars.registerHelper('timestamp', function(context, options) {
  var formatter        = options.hash['format'] ? options.hash['format'] : 'hh:mm a MM-DD-YYYY';
  var original_date    = Ember.getPath(this, context); // same as this.get(context) ?
  var parsed_date      = moment(original_date);
  var formatted_date   = parsed_date.format(formatter);

  return new Handlebars.SafeString("<time datetime=" + original_date +">" + formatted_date + "</time>");
}); 
役に立ちましたか?

解決

パブリックエンバーAPIを使用して、バインドされたハンドルバーヘルパーを作成できるようになりました。

Handlebars.registerBoundHelper('timestamp', function(date, options) {
  var formatter        = options.hash['format'] ? options.hash['format'] : 'hh:mm a MM-DD-YYYY';
  var parsed_date      = moment(date);
  var formatted_date   = parsed_date.format(formatter);

  return new Handlebars.SafeString("<time datetime=" + date +">" + formatted_date + "</time>");
});

ヘルパーに渡されたパラメーターはすでに解決されており、パスが変更されるたびにヘルパーが再び呼び出されます。

他のヒント

残念ながら、バインドされたコンテンツを備えたカスタムヘルパーを作成したいよりも複雑です。これがピーター・ワーゲネットが書いた例です。 https://gist.github.com/1563710

私はこれがより簡単になるためにロビー活動をします。

これがこの特定の質問に当てはまるかどうかはわかりませんが、ビューでヘルパーを作成し、ember.jsビューのデータが変更されたときに値を更新することを望んでいました。私がこの問題を解決した方法は、私が望んでいた価値に関するオブザーバーを書くことでした。

たとえば、(coffeescriptで):

...

attrObserver: Ember.observer(() ->
  $("#attrId").text(this.get("attr"))

...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top