Pregunta

Tengo un ayudante de formato de fecha/hora, pero lo que produce no se actualiza cuando cambia la propiedad subyacente. Esto no es una sorpresa, pero ¿alguien sabe cómo producir enlaces en los ayudantes?

Invoco el ayudante así ...

{{timestamp created_at}}

... y aquí está el ayudante en sí:

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>");
}); 
¿Fue útil?

Solución

Ahora es posible crear ayudantes de manillares vinculados utilizando una API de Ember pública.

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

El parámetro pasado al ayudante ya se habrá resuelto, y el ayudante será llamado nuevamente cada vez que cambie la ruta.

Otros consejos

Desafortunadamente, es más complejo de lo que me gustaría crear un ayudante personalizado con contenido vinculado. Aquí hay un ejemplo que escribió Peter Wagenet: https://gist.github.com/1563710

Estaré presionando para que esto sea más fácil.

No estoy seguro si esto se aplica a esta pregunta en particular, pero también creé ayudantes en las vistas y quería que los valores se actualizaran cuando los datos en la vista Ember.js cambiaron. La forma en que resolví este problema era escribir un observador sobre los valores que quería cambiar y usé jQuery para actualizar el valor específico.

Por ejemplo (en CoffeeScript):

...

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

...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top