Написание помощника, который дает связанные результаты?
У меня есть помощник форматирования даты и времени, но то, что он производит, не обновляется при изменении базового свойства. Это не удивительно, но кто-нибудь знает, как создавать привязки в помощниках?
Я вызываю помощника вроде этого...
{{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>");
});
Ответы
Ответ 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"))
...