2

我有以下处理几个视图的 StateManager。我希望不必手动转换到初始状态 App.stateManager.transitionTo('showingPhotos')。我宁愿只使用initialState状态管理器的属性。

在这种情况下,使用 StateManager的initialState属性不起作用,因为控制器在注入之前不可用App.initialize(App.stateManager)

有没有办法避免在注入控制器的同时手动转换到初始状态?有没有更好的方法来构建这样的状态管理器?

我创建了两个 JSfiddles:

http://jsfiddle.net/GmD8A/ - 这可行,但我必须手动转换到初始状态

http://jsfiddle.net/tgbuX/ - 这使用initialState而不是手动转换到初始状态,因此不起作用。

PhotosListView = Ember.View.extend({
  template: Ember.Handlebars.compile('<h2>Showing Photos</h2><a {{action "showContacts"}}>Show Contacts</a>')
});

ContactsListView = Ember.View.extend({
  template: Ember.Handlebars.compile('<h2>Showing Contacts</h2><a {{action "showPhotos"}}>Show Photos</a>')
});

StateManager = Ember.StateManager.extend({
  rootElement: '#body',
  showingContacts: Ember.ViewState.extend({
    view: ContactsListView,
    showPhotos: function(manager) {
      manager.transitionTo('showingPhotos');
    },
    enter: function(manager) {
      this._super(manager);
      this.setPath('view.controller', manager.get('photosController'));
    }
  }),
  showingPhotos: Ember.ViewState.extend({
    view: PhotosListView,
    showContacts: function(manager) {
      manager.transitionTo('showingContacts');
    },
    enter: function(manager) {
      this._super(manager);
      this.setPath('view.controller', manager.get('contactsController'));
    }
  })
});

App                    = Ember.Application.create()
App.PhotosController   = Ember.ArrayController.extend()
App.ContactsController = Ember.ArrayController.extend()
App.stateManager       = StateManager.create()

App.initialize(App.stateManager) // This injects the controllers
App.stateManager.transitionTo('showingPhotos') // I don't want to have to manually transition into this initial state

​</p>

4

1 回答 1

2

你应该看看最新的 Ember 版本,它现在有一个路由器,自动连接任何*Controller类实例,并outlets按照你想要的方式进行管理。

您可以从https://gist.github.com/2679013https://gist.github.com/2728699开始

编辑

您有一个新的进行中指南 @ https://emberjs-staging-new.herokuapp.com/guides/outlets#toc_the-router

于 2012-06-07T13:23:05.753 回答