Ember.js — Как привязать представление к экземпляру контроллера, созданному маршрутизатором

Я использую последнюю сборку Ember.js. У меня есть приложение Ember, которое отображает гистограмму с помощью flot.js. Представление привязано к одноэлементному объектному контроллеру для динамического обновления диаграммы. У меня есть простая демонстрация jsbin этой работы здесь: http://jsbin.com/edosaf/2/edit< /а>. Обратите внимание, что эта демонстрация создает объект cardController вместо его расширения. Вот соответствующий код:

App.cardController = Ember.ObjectController.create({
  id: 1,
  name: 'Visa',
  chartData: [ [2011, 450], [2012, 550], [2013, 320] ]
});

App.ApplicationView = Ember.View.extend({
    templateName: 'application',
    chartValuesBinding: 'App.cardController.chartData'
});

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

Я хочу расширить эту демонстрацию, используя различные данные гистограммы на основе card_id, переданного в URL-адрес. Маршрутизация будет иметь вид #/card/:card_id. Меня смущает, как связать мой ChartView с разными экземплярами моего Card ObjectController. Моя идея состоит в том, чтобы иметь Cards ArrayController для управления всеми объектами кредитных карт. Затем используйте Card ObjectController для управления активной картой, которая будет привязана к ArrayController, а также к ChartView.

Привязка: Cards ArrayController => Card ObjectController => Chart View

Я создал еще один jsbin, который пытается реализовать желаемую маршрутизацию, и Cards ArrayController (приложение не работает): http://jsbin.com/edosaf/4/edit

Как я могу привязать представление к экземпляру контроллера, созданному маршрутизатором ember? В этом примере, как бы вы рекомендовали спроектировать приложение ember для привязки объекта CardController к ChartView с помощью маршрутизации #/card/:card_id?


person Greg    schedule 25.04.2013    source источник


Ответы (1)


Как я могу привязать представление к экземпляру контроллера, созданному маршрутизатором ember?

Обычно у каждого из ваших представлений есть соответствующий синглтон контроллера. Например, внутри ApplicationView вы можете получить доступ к синглтону ApplicationController через свойство controller.

Всякий раз, когда вам нужно получить доступ к чему-то еще из представления, это следует делать через его контроллер. Затем используйте массив needs для подключения контроллеров.

ApplicationController = Ember.Controller.extend({
  needs: ['card']
});

ApplicationView = Ember.View.extend({
  chartValuesBinding: 'controllers.card.chartData'      
});
person Mike Grassotti    schedule 26.04.2013
comment
Спасибо, Майк! Я не знал, что на контроллеры можно так ссылаться в представлениях. - person Greg; 29.04.2013