状態マネージャー、コントローラー、およびビューを一緒にリンクすると同時に、醜いスパゲッティ コードを取得しないようにする必要があるという問題に直面しています。問題は、これらのオブジェクトのどれを最初に作成し、他のオブジェクトを作成する責任があるかということです。
具体的には、これが私の例です。まず、ビューは、子としてコレクション ビューを持つコンテナー ビューのサブクラスです。
App.MyView = Ember.ContainerView.extend {
childViews: ['streamView']
streamView: Ember.CollectionView.extend {
}
}
コントローラーは、load メソッドを持つ 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 のコンテンツをコントローラーのコンテンツにバインドする必要があります。どうすればこれをきれいに行うことができますか?
さらに、何らかのイベントが発生して別の状態に遷移する必要があるときにマネージャーに通知するために、状態マネージャーへの参照をビューとコントローラーに渡す方法。たとえば、アイテムまたはコントローラーをクリックしてジョブを終了しましたか?