2014-12-15 4 views
0

Большинство моих помощников шаблонов приводят к ошибкам пламени, и я не уверен, почему. Что делает их более странными, так это то, что они вообще не блокируют рендеринг или события из шаблонов, на самом деле приложение отлично работает.Ошибка Meteor Blaze с помощью Помощника шаблона

Основная проблема - беспорядочная, грязная консоль. Ниже приведен пример:

Template.templatename.helpers({ 
    adminhelper: function(){ 
     var theUser = Meteor.user(), 
      theUserId = theUser['_id']; 

     if(theUserId == "XXX"){ 
      return true; 
     } 
    } 
}); 

Только один способ проверки того, какой пользователь является пользователем admin. Это приводит к:

Exception in template helper: TypeError: Cannot read property '_id' of undefined 
    at Object.Template.templatename.helpers.adminhelper (http://localhost:3000/client/lib/helpers.js?37db222f849959237e4f36abdd8eba8f4157bd32:5:23) 
    at http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:2693:16 
    at http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:1602:16 
    at Object.Spacebars.call (http://localhost:3000/packages/spacebars.js?3c496d2950151d744a8574297b46d2763a123bdf:169:18) 
    at Template.manage.Blaze.If.HTML.HEADER.HTML.DIV.class (http://localhost:3000/client/views/template.templatename.js?868248757c652b031f64adad0edec9e2a276b925:6:22) 
    at null.<anonymous> (http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:2454:44) 
    at http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:1795:16 
    at Object.Blaze._withCurrentView (http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:2029:12) 
    at viewAutorun (http://localhost:3000/packages/blaze.js?77c0809654ee3a10dcd5a4f961fb1437e7957d33:1794:18) 
    at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:288:36) 

Интересно, что клиент/мнения/template.templatename.js не существует. Я помещал все помощники в файл helpers.js и все события в файле events.js.

Для моего маршрута у меня есть

Router.route('/theurl',function(){ 
    this.render('templatename'); 
},{ 
    waitOn: function(){ 
     return Meteor.user(); 
    } 
}); 

Что я могу сделать, чтобы избежать этих проблем в будущем?

ответ

2

Просто используйте guard, чтобы проверить наличие Meteor.user() перед извлечением _id. Ожидание на Meteor.user() в маршруте не работает, так как waitOn требует подписки. В качестве альтернативы вы можете просто сделать это:

Template.templatename.helpers({ 
    adminhelper: function() { 
    return Meteor.userId() === 'XXX'; 
    } 
}); 

Даже лучшим решением является использование roles package.

+0

Ах! Спасибо! Этот пакет ролей будет жизненно важным для моих производственных приложений. – thatgibbyguy

 Смежные вопросы

  • Нет связанных вопросов^_^