编写一个产生绑定结果的帮助器?

时间:2012-01-12 15:50:11

标签: ember.js mustache

我有一个日期/时间格式化助手,但它产生的内容在基础属性更改时不会更新。这并不奇怪,但有人知道如何在助手中生成绑定吗?

我像这样调用帮助器......

{{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>");
}); 

3 个答案:

答案 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"))

...