Question

J'ai une date / heure mise en forme, mais aide ce qu'elle produit ne met pas à jour lorsque la propriété change sous-jacents. Ce n'est pas une surprise, mais personne ne sait comment produire des liaisons dans les aides?

J'invoque l'aide comme ceci ...

{{timestamp created_at}}

... et voici l'aide elle-même:

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>");
}); 
Était-ce utile?

La solution

Il est maintenant possible de créer des aides liées Guidons en utilisant une API publique 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>");
});

Le paramètre transmis à l'aide aura déjà été résolu, et l'aide sera appelé à chaque fois que les changements de chemin.

Autres conseils

Il est malheureusement plus complexe que ce que je voudrais créer une aide personnalisée avec un contenu lié. Voici un exemple que Peter Wagenet a écrit: https://gist.github.com/1563710

Je vais faire du lobbyisme pour que cela devienne plus facile.

Je ne sais pas si cela s'applique à cette question particulière, mais j'ai aussi créé des aides dans les vues et je voulais les valeurs à jour lorsque les données dans la vue ember.js changé. La façon dont je résolu ce problème était d'écrire un observateur sur les valeurs que je voulais modifier et à utiliser jQuery pour mettre à jour la valeur spécifique.

Par exemple (en coffeescript):

...

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

...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top