質問
私は日付/時刻のフォーマットヘルパーを持っていますが、それが生成するものは、基礎となるプロパティが変更されたときに更新されません。これは驚きではありませんが、ヘルパーでバインディングを生産する方法を知っている人はいますか?
私はこのようにヘルパーを呼び出します...
{{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"))
...
所属していません StackOverflow