Могут ли шаблоны Meteor напрямую просматривать переменные сеанса?
В моем приложении Meteor я нахожу, что пишу много вещей, таких как:
Templates.myTemplate1.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
Templates.myTemplate2.isCurrentUser = function() {
return Session.get("isCurrentUser");
};
Мне нужно много разных шаблонов (я использую дескрипторы) для доступа к тому же простому значению, хранящемуся в сеансе.
Есть ли способ избежать повторной записи одной и той же функции?
Благодаря
Ответы
Ответ 1
Поскольку в настоящее время метеор использует рули в качестве шаблона шаблонов по умолчанию, вы можете просто определить помощник для этого:
if (Meteor.isClient) {
Template.registerHelper('isCurrentUser',function(input){
return Session.get("isCurrentUser");
});
}
вы можете сделать это в новом файле, например. вызванный helpers.js, чтобы сохранить файл app.js более чистым.
Как только этот помощник зарегистрирован, вы можете использовать его в любом шаблоне, вставив {{isCurrentUser}}
Ответ 2
На основе @cioddi ответьте, поскольку вы можете передавать параметры хелперам Handlebars, вы можете сделать его общей функцией, чтобы вы могли легко получить любое значение динамически, например
Template.registerHelper('session',function(input){
return Session.get(input);
});
Затем вы можете вызвать его в своем шаблоне следующим образом
{{session "isCurrentUser"}}
Обратите внимание, что auth packages поставляется с глобальным помощником с именем CurrentUser, который вы можете использовать для определения того, вошел ли пользователь в систему:
{{#if currentUser}}
...
{{/if}}
Ответ 3
Просто голова для всех: с выпуском 0.8.0 Handlebars.registerHelper
стал устаревшим. Используя новый движок Blaze, UI.registerHelper
станет новым методом достижения этого.
Обновленная версия кода @cioddi
UI.registerHelper('isCurrentUser',function(input){
return Session.get("isCurrentUser");
});
Ответ 4
На самом деле теперь вы можете просто использовать {{#if currentUser}}
Он глобально включен из пакета accounts/auth.
http://docs.meteor.com/#template_currentuser
Ответ 5
Вы хотите проверить эти помощники руля для метеор: https://github.com/raix/Meteor-handlebar-helpers
Есть несколько помощников сеанса, которые делают то, что вы хотите. Из документов:
Is my session equal to 4?: {{$.Session.equals 'mySession' 4}}
Ответ 6
Вы можете добавить isCurrentUserTemplate
и включить это в свои другие шаблоны с помощью
{{> isCurrentUserTemplate}}