/ / Błąd Meteor Blaze w szablonie Helper - meteor, żelazo-router, blask meteorów

Błąd Meteor Blaze z Template Helper - meteor, iron-router, meteor-blaze

Większość moich pomocników szablonów powoduje blaskbłędy i nie jestem pewien, dlaczego. Co bardziej dziwne, to fakt, że nie blokują renderowania ani zdarzeń z szablonów, w rzeczywistości aplikacja działa dobrze.

Głównym problemem jest niechlujna, niechlujna konsola. Przykład tego znajduje się poniżej:

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

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

Tylko jeden sposób sprawdzenia, który użytkownik jest użytkownikiem administracyjnym. To skutkuje:

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)

Co ciekawe, klient / views / template.templatename.js nie istnieje. Umieszczam wszystkich pomocników w pliku helpers.js, a wszystkie zdarzenia w pliku events.js.

Dla mojej trasy mam

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

Co mogę zrobić, aby uniknąć tych problemów w przyszłości?

Odpowiedzi:

2 dla odpowiedzi № 1

Po prostu użyj a strzec sprawdzić, czy istnieje Meteor.user() przed wypakowaniem _id. Czekam na Meteor.user() na trasie nie działa, jak waitOn wymaga subskrypcji. Możesz też po prostu to zrobić:

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

Jeszcze lepszym rozwiązaniem jest użycie pakiet ról.