0

Ember.js ステートチャートを複数のファイルに分割する最善の方法を見つけようとしています。

SproutCore を使用して、SC.State.plugin('statename') を使用して、別のファイルで定義した状態をメインのステートチャートに関連付ける必要がありました。

Ember にはそのような機能は見られなかったので、代わりに、statemanager の状態ハッシュに新しい状態を追加しただけです。(私のjsFiddleも参照してください)

App.statemanager = Ember.StateManager.create({
   stateOne: Ember.State.create(....)
})

// new file:
App.statemanager.states.stateTwo = Ember.State.create(....)

最初はこれが機能しているように見えました。定義した新しい状態に移行することができました。ただし、アクションを使用してこの状態から移行できないことがわかりました。

App.statemanager.states.stateTwo = Ember.State.create({
   doSomething: (manager) {
      manager.transitionTo("stateOne");
   }
)}

App.statemanager.send("doSomething");   // throws error when trying to transition

ローカルで発生するエラーは

Uncaught Error: assertion failed: You need to provide an object and key to `get`. 
  Ember.StateManager.Ember.State.extend.findStatesByRoute

私のjsFiddleで発生するエラーは

Uncaught TypeError: Cannot read property 'length' of undefined
  Ember.StateManager.Ember.State.extend.contextFreeTransition
  Ember.StateManager.Ember.State.extend.transitionTo

なぜこれが起こっているのか、ステートチャートを分割する正しい方法は何ですか?

4

1 に答える 1

0

作成済みのステート マネージャーを編集または追加する代わりに、個々のステートを構築してから、ステート チャートを構築するときにそれらをすべて結合する必要があります。

例: http://jsfiddle.net/a6wHt/5/

App.Statemanager = Ember.StateManager.extend({
    initialState: 'stateOne',

    stateOne: App.StateOne,
    stateTwo: App.StateTwo,
    stateThree: App.StateThree,
    stateFour: App.StateFour
});

また、extend を使用して「クラス」を構築し、最後に create でインスタンス化しました。ステート チャートをシングルトンとして扱う場合でも、これを習慣化することをお勧めします。これにより、後でコードをテストしやすくなります。

于 2012-09-08T01:56:40.657 に答える