2012-04-01 70 views
1

我有以下StateManager:在Ember.js状态管理状态之间传递数据

Lead.StateManager = Ember.StateManager.extend 
    initialState: 'notParsing' 

    notParsing: Ember.State.create 
    startParsing: (manager, search) -> 
     manager.goToState 'parsing' 

    parsing: Ember.State.create 
    enter: -> 

我能够通过使用stateManager的发送方法,像这样从notParsing状态解析状态转变:

@state_manager.send('startParsing', {search_url: "http://thesoftwaresimpleton.com/"}) 

我可以通过发送消息传递参数,但我无法通过使用GotoState函数的参数,因为它仅接受名称参数。

任何人都可以指出我可以传递参数传递给startParsing操作吗?

回答

1

我不知道我的解决方案是否合适,它肯定取决于用例,但您可以在manager本身上存储属性,请参阅http://jsfiddle.net/pangratz666/6Q39q/

App = Ember.Application.create({}); 

App.StateManager = Ember.StateManager.extend({ 
    initialState: 'notParsing', 

    notParsing: Ember.State.create({ 
     startParsing: function(manager, search) { 
      manager.set('url', search.searchUrl); 
      manager.goToState('parsing'); 
     } 
    }), 
    parsing: Ember.State.create({ 
     enter: function(manager) { 
      this._super(); 
      var url = manager.get('url'); 
      console.log('start parsing url: %@'.fmt(url)); 
     } 
    }) 
}); 

var stateManager = App.StateManager.create(); 
stateManager.send('startParsing', { 
    searchUrl: 'http://www.google.com' 
});​ 

另一种解决方案将是使用控制器,其在stateManager实例设置,参见http://jsfiddle.net/pangratz666/Y9KyA/

+0

在sproutcore状态图中,可以通过gotoState传递参数。我想知道为什么Ember不可能? 也许我应该使用一个可观的这个。 – dagda1 2012-04-02 08:45:01