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

StackOverflow https://stackoverflow.com/questions/8837958

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

Другие советы

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

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

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

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

...

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

...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top