Контроллер для неправильной настройки контроллера в ember.js
У меня есть следующий маршрутизатор:
Whistlr.OrganizationsNewRoute = Ember.Route.extend
model: ->
Whistlr.Organization.createRecord()
setupController: (controller, model) ->
@controllerFor('organization').set('content', model)
Это вызывается в новой организационной форме, которая имеет несколько входных данных с привязками, такими как:
Em.TextField valueBinding="name"
Когда я ввожу данные в любой из этих входов, я получаю это сообщение об ошибке:
Cannot delegate set('name', C) to the 'content' property of object proxy <Whistlr.OrganizationsNewController:ember519>: its 'content' is undefined.
Который говорит мне, что контроллер не был должным образом установлен маршрутизатором. Почему это происходит?
2 ответа
Причина в том, что вы устанавливаете модель на Whistlr.OrganizationsController
где как то controller
для Whistlr.OrganizationsNewRoute
будет Whistlr.OrganizationsNewController
чей контент не установлен, так как вы переопределяете setupController
из Whistlr.OrganizationsNewRoute
,
Если вы хотите Whistlr.OrganizationsNewRoute
иметь Whistlr.OrganizationsController
в качестве контроллера по умолчанию, вы можете сделать это
Whistlr.OrganizationsNewRoute = Ember.Route.extend({
controllerName: 'organization'
});
который установит Whistlr.OrganizationsController
в качестве контроллера по умолчанию для вашего Whistlr.OrganizationsController
с помощью которого вам может не потребоваться переопределить setupController
также. Но это доступно только в мастер.
Если вы используете сборку RC <= 1.0.0.RC6, вы должны сделать это, упомянув контроллер в renderTemplate
из Whistlr.OrganizationsNewRoute
,
Whistlr.OrganizationsNewRoute = Ember.Route.extend({
setupController: function(controller,model) {
this.controllerFor('organization').set('content', model)
},
renderTemplate: function(){
this.render({ controller: 'organization' });
}
});
Значение, возвращаемое из ловушки модели, будет присвоено свойству модели. В setupController модель будет неопределенной, если вы ничего не возвращаете.
модель: -> вернуть Whistlr.Organization.createRecord()