Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing a helper that produces bound results?

I have a date/time formatting helper but what it produces does not update when the underlying property changes. This is not a surprise, but does anyone know how to produce bindings in helpers?

I invoke the helper like this...

{{timestamp created_at}}

...and here is the helper itself:

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>");
}); 
like image 591
Jon M. Avatar asked Jan 12 '12 15:01

Jon M.


2 Answers

It is now possible to create bound Handlebars helpers using a public 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>");
});

The parameter passed to the helper will have already been resolved, and the helper will be called again whenever the path changes.

like image 104
Yehuda Katz Avatar answered Oct 24 '22 23:10

Yehuda Katz


It is unfortunately more complex than I'd like to create a custom helper with bound content. Here's an example that Peter Wagenet wrote: https://gist.github.com/1563710

I'll be lobbying for this to become easier.

like image 38
ebryn Avatar answered Oct 24 '22 23:10

ebryn