2012-01-12 5 views
13

Tengo un ayudante de formateo 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 ayudantes?Escribir un ayudante que produce resultados vinculados?

invoco la ayuda semejante a esto ...

{{timestamp created_at}} 

... y aquí es el ayudante mismo:

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

Una pequeña actualización de esta solo por mencionar que el asistente vinculado se acaba de comprometer a dominar. ver https://github.com/emberjs/ember.js/commit/46469831e7fe22d43b5dcfdf7ff60bd7000aa9de –

Respuesta

27

Ahora es posible crear ayudantes Manillares con destino utilizando una API pública 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>"); 
}); 

El parámetro pasado al ayudante ya se habrá resuelto, y se volverá a llamar al ayudante cada vez que cambie la ruta.

+0

¡Eso es increíblemente genial! Agrega una capa extra de flexibilidad. Personalmente, tengo "localización" en mente. Un ayudante "t" para traducir una cadena que se actualizará automáticamente cuando cambie el arreglo STRINGS. Increíble. Le vamos a dar una oportunidad. – nembleton

+0

Tenga en cuenta que no se puede utilizar con un asistente de bloque: http://stackoverflow.com/questions/18005111/custom-handlebars-helper-parameter-is-not-resolved –

+1

Si necesita un asistente de bloque, es probable que deba usando un componente. –

10

Por desgracia, es más complejo de lo que me gustaría crear una Ayuda personalizada con contenido enlazado. Aquí hay un ejemplo que Peter Wagenet escribió: https://gist.github.com/1563710

Presionaré para que esto sea más fácil.

+0

Mierda que es aún más complejo de lo que pensé que sería ... Me interesaría ver cómo se vuelve más simple. –

+0

De acuerdo. Definitivamente debería haber algo de azúcar aquí. – ghempton

+0

Tenga en cuenta que la última versión de Ember rompe esto porque Ember.Metamorph se ha renombrado como Ember._Metamorph. Aquí hay una idea actualizada: https://gist.github.com/2588802 – rlivsey

0

No estoy seguro de si esto se aplica a esta pregunta en particular, pero también creé helpers en vistas y quería que los valores se actualizaran cuando cambiaran los datos en la vista Ember.js. La forma en que resolví este problema fue 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")) 

... 
Cuestiones relacionadas