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 № 1Si 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.