2014-10-08 7 views
6

ho la seguente configurazione percorso: https://gist.github.com/chriswessels/76a64c421170095eb871Meteor ferro-router onBeforeAction this.next indefinito

sto ottenendo il seguente errore quando si tenta di caricare un percorso:

Exception in defer callback: TypeError: undefined is not a function 
at manageLoadingIndicator (http://localhost:3000/both/router/routes.js?ef701fada29363a443a214f97988ce96ebaec025:30:10) 
at RouteController.runHooks (http://localhost:3000/packages/iron_router.js?da7f2ac81c3fd9daebf49ce9a6980a54caa1dc17:843:16) 
at http://localhost:3000/packages/iron_router.js?da7f2ac81c3fd9daebf49ce9a6980a54caa1dc17:2302:14 
at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:288:36) 
at new Tracker.Computation (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:206:10) 
at Object.Tracker.autorun (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:476:11) 
at http://localhost:3000/packages/iron_router.js?da7f2ac81c3fd9daebf49ce9a6980a54caa1dc17:2279:12 
at Utils.extend._run.withNoStopsAllowed (http://localhost:3000/packages/iron_router.js?da7f2ac81c3fd9daebf49ce9a6980a54caa1dc17:2248:21) 
at Tracker.Computation._compute (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:288:36) 
at new Tracker.Computation (http://localhost:3000/packages/tracker.js?192a05cc46b867dadbe8bf90dd961f6f8fd1574f:206:10) 

Si sta parlando di la seguente linea, che è in un gancio onBeforeAction:

function manageLoadingIndicator (pause) { 
    if (this.ready()) { 
    Session.set('loading', false); 
    this.next(); // THIS LINE HERE 
    } else { 
    Session.set('loading', true); 
    pause(); 
    } 
} 

Perché this.next indefinito? Aiuto per favore!

Chris

+0

Sto avendo lo stesso problema, Chris. Ti farò sapere se lo capisco. Per favore, fai lo stesso per me. Grazie. – CoderZen

risposta

2

si stia mescolando fino diverse versioni di router Ferro:

Prima di ferro router 1.0, onBeforeAction sarebbe procedere ad azione a meno pause (il primo arg a onBeforeAction viene invocato Non esiste un metodo .next(). .

Da 1.0 in poi questo è stato cambiato. pause() non viene passato come parametro. questo è dove il metodo .next() sostituisce.

.210

Si evidentemente in esecuzione su una vecchia versione di router di ferro, in modo da quindi il vostro gancio dovrebbe essere simile a questo:

function manageLoadingIndicator (pause) { 
    if (this.ready()) { 
    Session.set('loading', false); 
    } else { 
    Session.set('loading', true); 
    pause(); 
    } 
} 

Una volta che si esegue l'aggiornamento del router di ferro, è necessario cambiare a questo:

function manageLoadingIndicator() { 
    if (this.ready()) { 
    Session.set('loading', false); 
    this.next(); 
    } else { 
    Session.set('loading', true); 
    } 
} 
+0

Grazie per la risposta. Hai ragione sul fatto che l'API del router di ferro è cambiata dalla versione 1.0 in poi, tuttavia c'è stato un periodo di flusso API, in cui l'argomento di pausa è stato ancora trasferito nella funzione di callback insieme a this.next. Credo che questa fosse la versione 0.9.4 (che era quando ho posto questa domanda). Ho migrato l'installazione del router per utilizzare this.next da solo dopo l'hit 1.0. Per gli altri: questo implica che tutti i tuoi hook onBeforeAction chiamino questo.next. Mettere in pausa l'esecuzione di un percorso è opt-out piuttosto che opt-in come era prima. – chriswessels