我正在努力弄清楚如何最好地将我的Ember.js状态图分成多个文件。
使用SproutCore我们需要使用SC.State.plugin('statename')将我们在另一个文件中定义的状态与我们的主状态图相关联。
我在Ember中没有看到这样的功能,所以我只是在状态管理器的状态哈希中添加了一个新状态。 (另见我的jsFiddle)
App.statemanager = Ember.StateManager.create({
stateOne: Ember.State.create(....)
})
// new file:
App.statemanager.states.stateTwo = Ember.State.create(....)
起初这似乎有效 - 我能够转换到我定义的新状态。但是,我发现我无法使用操作转换 out 此状态:
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
有谁知道为什么会这样,以及打破状态图的正确方法是什么?
答案 0 :(得分: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来构建'class',然后在最后用create实例化。我认为养成这样做的习惯是个好主意,即使你把状态图表视为单身人士也是如此。它使您的代码更容易在以后测试。