Ошибка перехода при разделении диаграммы состояний 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. Я думаю, что это хорошая идея, чтобы привыкнуть к этому, даже если вы рассматриваете свою диаграмму состояний как одиночку. Это делает ваш код проще для тестирования в дальнейшем.

Другие вопросы по тегам