2016-07-20 16 views
0

Ich erhalte einen neugierigen Fehler in einem Schablone Helfer und ich hoffte, dass jemand Augen mit ihm aufwerfen könnte. Grundsätzlich ist der Fehler, den ich in der Konsole des Clients bekomme, dass die getArena() .Height nicht definiert ist. Console.log (getArena(). Height) gibt jedoch den korrekten Eigenschaftswert zurück. Es scheint ein Timing-Problem zu sein, das den Fehler verursacht, aber meine Anwendung funktioniert tatsächlich. Was kann ich tun, um diesen Konsolenfehler zu beheben?Kann Eigenschaft von undefined nicht lesen, aber Eigenschaft existiert

//My template helper function 
yGrids: function() { 

     console.log(getArena); 
     console.log(getArena().height); 
     var yArray = []; 
     for (var i=0;i<(getArena().height);i++){ 
      yArray.push({}); 
     } 
     return yArray; 
    }, 


// The console results 
function getArena() {                        // 50 
    return Arenas.findOne(Session.get('arena_id'));       … 
Exception in template helper: TypeError: Cannot read property 'height' of undefined 
    at Object.yGrids (http://localhost:3000/app/app.js?hash=c17abf51d6af6541e868fa3fd0b26e34eea2df28:94:35) 
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2994:16 
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1653:16 
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3046:66 
    at Function.Template._withTemplateInstanceFunc (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3687:12) 
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:3045:27 
    at Object.Spacebars.call (http://localhost:3000/packages/spacebars.js?hash=65db8b6a8e3fca189b416de702967b1cb83d57d5:172:18) 
    at http://localhost:3000/app/app.js?hash=c17abf51d6af6541e868fa3fd0b26e34eea2df28:24:22 
    at .<anonymous> (http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:2754:17) 
    at http://localhost:3000/packages/blaze.js?hash=ef41aed769a8945fc99ac4954e8c9ec157a88cea:1875:20 
function getArena() {                        // 50 
    return Arenas.findOne(Session.get('arena_id'));       … 
2 

Antwort

1

Dies ist ein sehr häufiges Problem in Meteor-Helfern, wenn es sich um eine Sammlung handelt, die möglicherweise noch nicht über ein Abonnement geladen wurde. Im Allgemeinen möchten Sie eine Ladevorlage anstelle Ihres tatsächlichen Layouts anzeigen, bis Ihr Abonnement bereit ist. Oder (weniger elegant) können Sie sich wehren mit:

var arena = getArena(); 
var height = arena && arena.height; 
+0

Was ich tun gelandet ist meine Funktion mit umgebenden 'if (getArena()) {// Funktion }' und es scheint zu funktionieren jetzt in Ordnung. – Scott

+0

Das ist gut, es bedeutet nur, dass du es zweimal nennst. –

+0

verhindert die Verwendung der Guard-Methode, dass sie zweimal aufgerufen wird? – Scott

0

Was auch immer getArena() gibt sollten Sie es in der reaktiven Variablen speichern, indem die reaktive variable Einstellung und Sie können die reaktiven var in Helfer von get Zugang()

Methode
Verwandte Themen