Ошибка перехода при разделении диаграммы состояний Ember между несколькими файлами
Я пытаюсь решить, как лучше разбить мою диаграмму состояний 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(....)
Сначала это, казалось, сработало - я смог перейти в новое состояние, которое я определил. Однако я обнаружил, что не смог выйти из этого состояния с помощью действия:
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
Кто-нибудь знает, почему это происходит, и каков правильный способ разбить диаграмму состояний?
1 ответ
Вместо того, чтобы пытаться редактировать или добавлять уже созданный менеджер состояний, вы должны создать отдельные состояния, а затем объединить их все при построении диаграммы состояний.
Например: 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. Я думаю, что это хорошая идея, чтобы привыкнуть к этому, даже если вы рассматриваете свою диаграмму состояний как одиночку. Это делает ваш код проще для тестирования в дальнейшем.