2012-04-01 71 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