Написание помощника, который дает связанные результаты? - PullRequest
13 голосов
/ 12 января 2012

У меня есть помощник форматирования даты / времени, но то, что он выдает, не обновляется при изменении базового свойства Это не удивительно, но кто-нибудь знает, как создавать привязки в помощниках?

Я вызываю помощника вот так ...

{{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 ]

27 голосов
/ 30 декабря 2012

Теперь можно создавать связанные помощники Handlebars с помощью общедоступного Ember 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>");
});

Параметр, переданный помощнику, уже будет разрешен, и помощник будет вызываться снова при изменении пути.

10 голосов
/ 13 января 2012

К сожалению, это сложнее, чем я хотел бы создать пользовательский помощник со связанным содержимым. Вот пример, который написал Питер Вагенет: https://gist.github.com/1563710

Я буду лоббировать, чтобы это стало легче.

0 голосов
/ 10 августа 2012

Не уверен, относится ли это к этому конкретному вопросу, но я также создал помощников в представлениях и хотел, чтобы значения обновлялись при изменении данных в представлении Ember.js. Я решил эту проблему, написав наблюдатель для значений, которые я хотел изменить, и использовал jQuery для обновления конкретного значения.

Например (в Coffeescript):

...

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

...
...