2015-05-29 3 views
1

Это прекрасно работает:Железный маршрутизатор RouteController дает не Defined ошибку

Router.route('/', function() { 
    this.render('home'); 
}); 

Router.route('/about', function() { 
    this.render('aboutView'); 
}); 

Однако это дает ошибку (RouteController 'HomeController' не определено):

var HomeController, MainController; 
HomeController = RouteController.extend({ 
    action: function() { 
     this.render('home', { 
    }); 
    } 
}); 

MainController = RouteController.extend({ 
    action: function() { 
    this.render('aboutView', { 
    }); 
    } 
}); 
Router.route('/', {name: 'home', controller: 'HomeController'}); 
Router.route('/about', {name: 'about', controller: 'MainController'}); 

Я пробовал различные перестановки (взято из документации IronRouter), но все еще существует та же ошибка. Что я делаю неправильно?

ответ

1

Либо удалите эту строку:

var HomeController, MainController; 

Чтобы сделать эти глобальные переменные.

Или удалить кавычки при указании контроллеров:

Router.route('/', {name: 'home', controller: HomeController}); 
Router.route('/about', {name: 'about', controller: MainController}); 

Почему это так?

Когда вы определяете контроллеры с помощью iron:router, вы можете использовать 2 разных синтаксиса, используя переменный идентификатор строки.

Если вы используете идентификатор переменной, контроллер должен быть объявлен как локальная переменная с файлом, используя ключевое слово var.

Однако, если вы используете строку, контроллер будет выглядеть как глобальная переменная (свойство объекта window), а глобальные переменные в Meteor определены без ключевого слова var.

Обычно вы определяете свои контроллеры в разных файлах (это точка контроллера, внешняя логика маршрутизации), поэтому чаще всего используется синтаксис строк.

+0

Спасибо, удаление кавычек было решением, если нормально создавать контроллер локально. Я не могу заставить его работать с контроллером в качестве глобальной переменной. – jalal

+0

Можете ли вы разместить свой код с настройкой глобальной переменной? Обычно это предпочтительный способ объявления контроллеров. – saimeunt

+0

В исходном коде я использовал «use strict» в верхней части файла, чтобы понравиться jshint. Я не думал, что это повлияет на другие, но когда я удалю эту строку, у Meteor нет проблем с использованием строки для идентификации контроллера. Я не знаю, почему, но я знаю, что у Метеор странные отношения со строгим режимом. – jalal

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