Ember statemanager, контроллер, вид, модель: как связать их вместе?

Я столкнулся с проблемой, когда мне нужно связать диспетчер состояний, контроллер и просмотреть вместе и в то же время избежать получения уродливого кода спагетти. И возникает вопрос: какой из этих объектов должен быть создан первым и нести ответственность за создание других?

Чтобы быть конкретным, вот мой пример. Сначала представление представляет собой подкласс представления контейнера, который имеет представление коллекции как дочернего:

App.MyView = Ember.ContainerView.extend {

     childViews: ['streamView']

     streamView: Ember.CollectionView.extend {
     }

}

Контроллер - это как подкласс Ember.ArrayController с методом загрузки:

App.MyController = Ember.ArrayController.extend {
     load: ->
        console.log "loading data"
}

Диспетчер состояний имеет состояние представления, которое будет создавать экземпляр App.MyView:

App.MyStateManager = Ember.StateManager.extend {

   initialeState: 'ready'

   ready: Ember.ViewState.extend {

        view: App.MyView    

   }
}

Теперь мне нужно запустить следующий тест:

 controller = App.MyController.create {}
 manager = App.MyStateManager.create {}

 expect(manager.getPath('currentState.name').toEqual('ready')
 expect(controller.load).toHaveBeenCalled()
 streamView = manager.getPath('currentState.view.streamView.content')
 expect(streamView.content).toEqual(controller.content)

Чтобы заставить последнее ожидание работать, мне нужно связать содержимое моего streamView, являющегося дочерним элементом App.MyView, с содержимым контроллера. Как я могу сделать это чисто?

Кроме того, как передать ссылку на диспетчер состояний на представление и контроллер, чтобы уведомить менеджера о возникновении какого-либо события, поэтому ему необходимо перейти в другое состояние. Например, щелчок по элементу или контроллеру завершил работу?

Ответ 1

Взгляните на этот вопрос Yehuda Katz, обсуждая новую реализацию маршрутизатора. https://gist.github.com/2728699

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