在Ember.js状态管理器中的状态之间传递数据



我有以下StateManager:

Lead.StateManager = Ember.StateManager.extend
  initialState: 'notParsing'
  notParsing: Ember.State.create
    startParsing: (manager, search) ->
      manager.goToState 'parsing'
  parsing: Ember.State.create
    enter: ->

我可以使用stateManager的send方法从notParsing状态转换到解析状态,如下所示:

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

我可以通过发送消息传递参数,但不能使用goToState传递参数,因为它只接受名称参数。

有人能指出我如何将传递到startParsing操作中的参数传递出去吗?

我不知道我的解决方案是否是一个好的解决方案,它肯定取决于用例,但您可以将属性存储在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/.

最新更新