2012-04-01 3 views
1

Ich habe folgendes State:Übergabe von Daten zwischen den Staaten im Ember.js Zustand Managern

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

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

    parsing: Ember.State.create 
    enter: -> 

ich in der Lage bin vom notParsing Zustand in dem Parsing-Zustand über durch die Sendemethode des State wie folgt aus :

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

kann ich Argumente über die Nachrichtensende passieren, aber ich kann mit GoToState passieren, weil es einen Namen Argument nicht nur Argumente akzeptiert.

Kann jemand darauf hinweisen, wie ich das Argument weitergeben kann, das in startParsing Aktion übergeben wird?

Antwort

1

Ich weiß nicht, ob meine Lösung eine gute ist und es hängt sicherlich vom Anwendungsfall ab, aber Sie könnten Eigenschaften auf der manager selbst speichern, siehe 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' 
});​ 

Eine andere Lösung wäre Controller zu verwenden, die auf der stateManager Instanz festgelegt werden, finden Sie http://jsfiddle.net/pangratz666/Y9KyA/.

+0

Im Sprössling-Statechart ist es möglich, Argumente mit gotoState zu übergeben. Ich frage mich, warum es mit Ember nicht möglich ist? Vielleicht sollte ich dafür ein Beobachtbares verwenden. – dagda1