/ / Meteor Blaze-Fehler mit Template Helper - Meteor, Eisen-Router, Meteor-Blaze

Meteor Blaze Fehler mit Template Helper - Meteor, Eisen-Router, Meteor-Blaze

Die meisten meiner Vorlagenhelfer führen zu FlammenFehler und ich bin mir nicht sicher, warum. Was sie noch seltsamer macht, ist, dass sie das Rendern oder Ereignisse aus den Vorlagen überhaupt nicht blockieren. Tatsächlich funktioniert die App einwandfrei.

Das Hauptproblem ist eine unordentliche, unordentliche Konsole. Ein Beispiel dafür ist unten:

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

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

Nur eine Möglichkeit, um zu überprüfen, welcher Benutzer ein Administrator ist. Das führt zu:

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)

Interessanterweise existiert client / views / template.templatename.js nicht. Ich füge alle Helfer in eine Datei helpers.js und alle Ereignisse in eine Datei events.js ein.

Für meine Route habe ich

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

Was kann ich tun, um diese Probleme in Zukunft zu vermeiden?

Antworten:

2 für die Antwort № 1

Benutze einfach ein bewachen auf die Existenz von Meteor.user() vor dem extrahieren der _id. Warten auf Meteor.user() in der route funktioniert nicht, wie waitOn erfordert ein Abonnement. Alternativ können Sie dies auch einfach tun:

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

Eine noch bessere Lösung ist die Verwendung des Rollenpaket.