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