/ / ¿Es posible 'unir' un ayudante de manillares antes de renderizar? (usando express y hbs) - express, handlebars.js

¿Es posible `atar` un ayudante de manillar antes de renderizar? (utilizando express y hbs) - express, handlebars.js

Tengo una función llamada de ayuda que se ve así:

hbs.registerHelper("feature", function(request, flag, options) {
if (features(flag, request)) {
return options.fn(this);
} else if (options.inverse) {
return options.inverse(this);
}
});

Y usado en la plantilla una y otra vez así:

{{feature request "some-feature"}} ... {{/feature}}

Me encantaría poder quitar el request parte en la plantilla ya que es siempre el mismo valor y nunca cambia. Así que imagino que podría enlazar request a feature cuando se procesa, y obviamente eso cambia cada vez y no quiero que se difunda a otra solicitud.

Algo como:

res.render("page", {
feature: hbs.helper.feature.bind(null, req)
});

es posible?

Respuestas

2 para la respuesta № 1

Si no está utilizando el modo de ayudante conocido, entonces la evaluación del ayudante verificará el contexto para que pueda pasar un enlace como el que tiene anteriormente y debería funcionar.

Bajo el último código en master de manillares, la evaluación es algo así como:

helper = helpers.foo || (depth0 && depth0.foo) || helperMissing
helper.call(depth0, 1, {"name":"foo","hash":{},"data":data}

Donde depth0 es el objeto de contexto actual. La advertencia aquí es que a los ayudantes se les da prioridad, por lo que debe nombrarlos de manera diferente. También deberías poder hacer algo como {{./foo bar}} para dar prioridad a la versión del contexto local, pero parece que tenemos una error donde eso no es honrado bajo esta construcción de sintaxis particular.