meteor handlebars.js

¿Pueden las plantillas de Meteor acceder a las variables de sesión directamente?



handlebars.js (6)

En mi aplicación Meteor me encuentro escribiendo muchas cosas como:

Templates.myTemplate1.isCurrentUser = function() { return Session.get("isCurrentUser"); }; Templates.myTemplate2.isCurrentUser = function() { return Session.get("isCurrentUser"); };

Necesito muchas plantillas diferentes (estoy usando manubrios) para acceder al mismo valor simple almacenado dentro de la sesión.

¿Hay alguna manera de evitar escribir la misma función una y otra vez? Gracias


Basándose en la respuesta de , ya que puede pasar parámetros a los ayudantes de Handlebars, puede hacer que sea una función genérica para que pueda recuperar fácilmente cualquier valor de forma dinámica, por ejemplo

Template.registerHelper(''session'',function(input){ return Session.get(input); });

A continuación, puede llamarlo en su plantilla como este

{{session "isCurrentUser"}}

Tenga en cuenta que los paquetes de autenticación vienen con un ayudante global llamado CurrentUser que puede usar para detectar si el usuario está conectado:

{{#if currentUser}} ... {{/if}}


Como meteorito actualmente usa manubrios como motor de plantillas predeterminado, puedes definir un helper para eso:

if (Meteor.isClient) { Template.registerHelper(''isCurrentUser'',function(input){ return Session.get("isCurrentUser"); }); }

Puedes hacer esto en un archivo nuevo, por ejemplo llamado helpers.js, para mantener el archivo app.js más limpio. Una vez que esta ayudante está registrada, puede usarla en cualquier plantilla insertando {{isCurrentUser}}



Puede agregar isCurrentUserTemplate e incluir esto en sus otras plantillas con

{{> isCurrentUserTemplate}}


Querrá consultar estos ayudantes de manubrio para meteoro: https://github.com/raix/Meteor-handlebar-helpers

Hay varios ayudantes de sesión, uno que hace lo que quieres. De los documentos:

Is my session equal to 4?: {{$.Session.equals ''mySession'' 4}}


Solo un aviso para todos: con el lanzamiento de 0.8.0, Handlebars.registerHelper ha quedado obsoleto. Usando el nuevo motor Blaze, UI.registerHelper sería el nuevo método para lograr esto.

Versión actualizada del código de @cioddi

UI.registerHelper(''isCurrentUser'',function(input){ return Session.get("isCurrentUser"); });