Я столкнулся с проблемой, когда мне нужно связать диспетчер состояний, контроллер и просмотреть вместе и в то же время избежать получения уродливого кода спагетти. И возникает вопрос: какой из этих объектов должен быть создан первым и нести ответственность за создание других?
Чтобы быть конкретным, вот мой пример. Сначала представление представляет собой подкласс представления контейнера, который имеет представление коллекции как дочернего:
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, с содержимым контроллера. Как я могу сделать это чисто?
Кроме того, как передать ссылку на диспетчер состояний на представление и контроллер, чтобы уведомить менеджера о возникновении какого-либо события, поэтому ему необходимо перейти в другое состояние. Например, щелчок по элементу или контроллеру завершил работу?