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

时间:2012-04-01 19:41:24

标签: 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动作的参数吗?

1 个答案:

答案 0 :(得分: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/