Подтвердить что ты не робот

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, чтобы найти ее...

Спасибо за ваши предложения, ребята!

4b9b3361

Ответ 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}}

И первый оператор журнала показал связанный контроллер. Вы видите концептуальную разницу между моим кодом и вашим?