2014-10-08 5 views
6

Я получил следующую конфигурацию маршрута: https://gist.github.com/chriswessels/76a64c421170095eb871Метеор железо-маршрутизатор onBeforeAction this.next неопределенные

Я получаю следующее сообщение об ошибке при попытке загрузить маршрут:

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) 

Это говорит о следующая строка, которая находится в onBeforeAction крючке:

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

Почему this.next не определено? Помоги пожалуйста!

Chris

+0

У меня такая же проблема Крис. Я дам вам знать, если я это выясню. Пожалуйста, сделайте то же самое для меня. Спасибо. – CoderZen

ответ

2

Вы путаете разные версии Iron маршрутизатора:

До железа маршрутизатора 1.0, onBeforeAction бы приступить к действиям, если pause (первый аргумент в onBeforeAction не вызываются Там нет .next() метода. .

От 1,0 года это не было изменено. pause() больше не передается в качестве аргумента. здесь метод .next() заменяет его.

Вы, очевидно, работает на старой версии железа маршрутизатора, так что поэтому ваш крючок должен выглядеть следующим образом:

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

После обновления железа маршрутизатор, вы должны изменить его к этому:

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

Спасибо за ответ. Вы правы, что API-интерфейс Iron-router изменился с 1.0, но был период API-потока, где аргумент паузы все еще передавался в функцию обратного вызова вместе с этим. Я считаю, что это была версия 0.9.4 (которая была, когда я задал этот вопрос). Я перенес настройку маршрутизатора, чтобы использовать this.next самостоятельно после 1.0 ударов. Для других: это включает в себя обеспечение того, чтобы все ваши onBeforeAction hooks вызывали this.next. Приостановка выполнения маршрута - это отказ, а не отказ, как и раньше. – chriswessels

Смежные вопросы