我有一个日期/时间格式化助手,但它产生的内容在基础属性更改时不会更新。这并不奇怪,但有人知道如何在助手中生成绑定吗?
我像这样调用帮助器......
{{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>");
});
答案 0 :(得分:27)
现在可以使用公共Ember API创建绑定的Handlebars助手。
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>");
});
传递给帮助程序的参数已经解析,只要路径发生变化,就会再次调用帮助程序。
答案 1 :(得分:10)
遗憾的是,我想创建一个带有绑定内容的自定义帮助程序比使用它更复杂。以下是Peter Wagenet写的一个例子:https://gist.github.com/1563710
我会游说让这变得更容易。
答案 2 :(得分:0)
不确定这是否适用于此特定问题,但我还在视图中创建了帮助程序,并希望在Ember.js视图中的数据发生更改时更新值。我解决这个问题的方法是编写一个关于我想要改变的值的观察者,并使用jQuery来更新特定的值。
例如(在Coffeescript中):
...
attrObserver: Ember.observer(() ->
$("#attrId").text(this.get("attr"))
...