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
});

此外,我使用扩展来构建“类”,然后在最后用创建实例化。我认为养成这样做的习惯是个好主意,即使您将状态图视为单身人士。它使您的代码在以后更容易测试。

于 2012-09-08T01:56:40.657 回答