Ember 1.0.0 - больше не может обращаться к контроллеру?
Я использую помощник render
внутри шаблона, который отображает поисковый запрос с именем типа.
По существу (код удален для краткости):
script(type='text/x-handlebars', data-template-name='index')
{{render search}}
script(type='text/x-handlebars', data-template-name='search')
{{view App.TaggableInput valueBinding="searchText"}}
Что дает мне SearchController
, отделенный от IndexController
.
Внутри App.TaggableInput
Я хватаю SearchController
, чтобы выполнить некоторую проверку события keyUp:
App.TaggableInput = Ember.TextField.extend({
keyUp: function(e){
var controller = this.get('controller');
// Do stuff with the controller
}
});
В Ember RC7 я могу получить доступ к контроллеру внутри представления, как вы ожидали бы с помощью this.get('controller').get('searchText')
.
Однако в Ember 1.0.0 this.get('controller')
возвращается представление, и что бы я ни делал, я не могу получить SearchController
.
Я не могу найти какую-либо информацию на веб-сайте ember о том, что изменилось или что я должен делать... пока я придерживаюсь RC7.
Любые идеи? Сегодня утром я провел там часы и не могу понять. Спасибо.
ОБНОВЛЕНИЕ: исправлено!
Я поменял this.get('controller')
на this.get('targetObject')
и работает по-прежнему. Просматривал через недавнюю фиксацию в источнике ember, чтобы найти ее...
Спасибо за ваши предложения, ребята!
Ответы
Ответ 1
Я предполагаю, что в вашем коде
App.TaggableInput = Ember.TextField.extend({
keyUp: function(e){
var controller = this.get('controller');
// Do stuff with the controller
}
});
эта строка
var controller = this.get('controller');
получает контроллер, связанный с вашим (subview)
Попробуйте использовать эту строку вместо доступа к контроллеру маршрута:
var controller = this.get('parentView.controller');
Ответ 2
В настоящее время помощник {{render}}
принимает 2 аргумента, первый - это контекст, второй - модель.
Я рекомендую использовать этот метод и придерживаться соглашения об именах для контроллера модели, а не явно указывать контроллер.
Здесь вы можете найти документы:
http://emberjs.com/guides/templates/rendering-with-helpers/#toc_the-code-render-code-helper
Доступ к контроллерам из представлений также отслеживался в этом обсуждении:
https://github.com/emberjs/ember.js/issues/1712#issuecomment-31183940
Ответ 3
Я думаю, что Эмбер не изменил своего поведения. Я создал JSBin, где мне удалось получить контроллер успешно.
Что я сделал, так это создание простого представления и показать его с помощью {{render}}
helper:
Вид:
App.FooView = Ember.TextField.extend({
didInsertElement : function(){
console.log(this.get("controller.constructor"));
console.log(this.get("context.constructor"));
}
});
Шаблон:
{{render foo}}
И первый оператор журнала показал связанный контроллер. Вы видите концептуальную разницу между моим кодом и вашим?