Подтвердить что ты не робот

Написание помощника, который дает связанные результаты?

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

Я вызываю помощника вроде этого...

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

Ответ 1

Теперь можно создать связанные хелперы Handlebars, используя общедоступный API Ember.

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

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

Ответ 2

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

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

Ответ 3

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

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

...

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

...