Ember.js 余烬状态管理器、控制器、视图、模型:如何将它们链接在一起?
我面临一个问题,我需要将状态管理器、控制器和视图链接在一起,同时避免得到一个难看的意大利面代码。问题是:这些对象中哪一个应该首先创建,并且有责任创建其他对象 具体来说,这里是我的例子。首先,该视图是容器视图的一个子类,该容器视图的子级为集合视图:Ember.js 余烬状态管理器、控制器、视图、模型:如何将它们链接在一起?,ember.js,Ember.js,我面临一个问题,我需要将状态管理器、控制器和视图链接在一起,同时避免得到一个难看的意大利面代码。问题是:这些对象中哪一个应该首先创建,并且有责任创建其他对象 具体来说,这里是我的例子。首先,该视图是容器视图的一个子类,该容器视图的子级为集合视图: App.MyView = Ember.ContainerView.extend { childViews: ['streamView'] streamView: Ember.CollectionView.extend {
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)
为了使最后一个期望生效,我需要将App.MyView的子级streamView的内容与控制器内容绑定。我怎样才能做到干净呢
此外,如何将对状态管理器的引用传递给视图和控制器,以便在某些事件发生时通知管理器,以便它需要转换到另一个状态。例如,单击一个项目或控制器是否完成了一项工作?看看Yehuda Katz讨论新路由器实现的要点。
建议将路由器和状态管理器作为三层连接的起点。似乎是一个死链接。