Frage

Ich habe einen Helfer für Datum/Uhrformatierung, aber was er produziert, aktualisiert nicht, wenn sich die zugrunde liegende Eigenschaft ändert. Dies ist keine Überraschung, aber weiß jemand, wie man Bindungen in Helfern herstellt?

Ich rufe den Helfer so auf ...

{{timestamp created_at}}

... und hier ist der Helfer selbst:

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>");
}); 
War es hilfreich?

Lösung

Es ist jetzt möglich, gebundene Lenkerhelfer mit einer öffentlichen Ember -API zu erstellen.

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

Der an den Helfer übergebene Parameter wird bereits gelöst, und der Helfer wird erneut aufgerufen, wenn sich der Pfad ändert.

Andere Tipps

Es ist leider komplexer, als ich gerne einen benutzerdefinierten Helfer mit gebundenen Inhalten erstellen möchte. Hier ist ein Beispiel, das Peter Wagenet schrieb: https://gist.github.com/1563710

Ich werde mich dafür einsetzen, dass dies einfacher wird.

Ich bin mir nicht sicher, ob dies für diese bestimmte Frage gilt, aber ich habe auch Helfer in Ansichten erstellt und wollte, dass die Werte aktualisieren, wenn sich Daten in der Ansicht von ember.js geändert haben. Die Art und Weise, wie ich dieses Problem gelöst habe, bestand darin, einen Beobachter über die Werte zu schreiben, die ich änderte und JQuery verwendet habe, um den spezifischen Wert zu aktualisieren.

Zum Beispiel (in Coffeescript):

...

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

...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top