javascript - handlebars - npm hbs
Cómo escribir ayudantes en HTMLBars? (4)
Después de la última versión de EmberJS v1.9.0 estoy intentando pasar de las barras de control a las barras de HTML. Lo que me resulta muy desafiante es la falta de documentación.
Estoy tratando de implementar ayudantes muy simples.
Por ejemplo, tome estos auxiliares de manubrio:
HTML
<div id="main"></div>
<script type="text/x-handlebars" data-template-name="index">
{{logIt test}}
<h1>{{test}}</h1>
</script>
JS
App = Ember.Application.create({
rootElement: ''#main''
});
App.IndexRoute = Ember.Route.extend({
setupController: function(controller){
controller.set(''test'', ''mytest'');
}
});
Ember.Handlebars.registerHelper("logIt", function(something) {
console.log(something);
});
Js Fiddle: http://jsfiddle.net/sisir/p463q2L8/
¿Cómo lo convierto a htmlbars?
Creo que puedes usar Ember.Handlebars.helper, que es lo que está en las últimas guías de emberjs . Este jsbin usa htmlbars y funciona. Este es el ayudante en el jsbin
AppLogItHelper = Ember.Handlebars.helper("logIt", function(something){
console.log(something);
});
Si está utilizando ember-cli , generará automáticamente uno para usted, pero eso usa Ember.Handlebars.makeBoundHelper que no funciona en el jsbin pero funciona en mi aplicación ember-cli.
A partir de Ember 1.13, hay dos API: http://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_new-ember-js-helper-api
La sintaxis más simple y común es ahora esta:
export default Ember.Helper.helper(function(params, hash) {
return params.join('' '');
});
Los ayudantes reciben dos argumentos: los params son los parámetros pedidos pasados a un ayudante, y el hash contiene las opciones de valor-clave, por ejemplo title = "Mr.".
¡Una novedad muy importante es que HTMLBars tiene subexpresión ! Como Ember 1.10+ se cambió a HTMLBars, debería usar Ember.HTMLBars.makeBoundHelper en Ember.Handlebars.registerHelper
lugar Ember.Handlebars.registerHelper
. Pero aún puede usar Ember.Handlebars.registerHelper
de la versión 1.10.1 de Ember
Nuevo enfoque:
App.XEqHelper = Ember.HTMLBars.makeBoundHelper(function(params, hash, options, env) {
return params[0] === params[1];
});
llama desde plantillas como:
{{#if (x-eq order ''delivery_order'')}}
Need a delivery
{{/if}}
A partir de Ember 1.10.0, esta pregunta se resuelve haciendo Ember.HTMLBars.makeBoundHelper(theHelperFunction)
.
Editar: desde Ember 1.13.6 (31 de julio de 2015), usar esto se marca como obsoleto.
DEPRECATION: El uso de Ember.HTMLBars._registerHelper está en desuso. Los ayudantes (incluso los descuidados) se resuelven automáticamente. [id deprecation: ember-htmlbars.register-helper]