Domanda

Ho un aiutante di formattazione data/ora ma ciò che produce non si aggiorna quando la proprietà sottostante cambia. Questa non è una sorpresa, ma qualcuno sa come produrre attacchi negli aiutanti?

Invoco l'aiutante in questo modo ...

{{timestamp created_at}}

... ed ecco l'aiutante stesso:

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>");
}); 
È stato utile?

Soluzione

Ora è possibile creare aiutanti a manubrio legati che utilizzano un'API di Ember pubblica.

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

Il parametro passato all'aiutante sarà già stato risolto e l'aiutante verrà nuovamente chiamato ogni volta che il percorso cambia.

Altri suggerimenti

Purtroppo è più complesso di quanto vorrei creare un aiutante personalizzato con contenuti legati. Ecco un esempio che Peter Wagenet ha scritto: https://gist.github.com/1563710

Farò pressioni per questo per diventare più facile.

Non sono sicuro se questo si applica a questa particolare domanda, ma ho anche creato aiutanti nelle viste e volevo che i valori si aggiornino quando i dati nella vista Ember.js sono cambiati. Il modo in cui ho risolto questo problema era scrivere un osservatore sui valori che volevo modificare e usare jQuery per aggiornare il valore specifico.

Ad esempio (in caffè):

...

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

...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top