1

Ember.StateManagerを使用する場合、Em.State間の最も一般的な遷移には、何らかのパラメーターが含まれます。現在、goToStateを使用してある状態から別の状態に移動するときに、StateManager内のインスタンス変数を使用して状態間でパラメーターを渡します。これは私には信じられないほど醜いようです。パラメータを渡すためのより標準的な方法がない理由はありますか?または、別のパターンを使用する必要があります。

例えば、

App.stateManager = Em.StateManager.create({
  initialState: 'listContacts',
  listContacts: Em.ViewState.create({
    ...
    actionSelectContact: function(manager, context) {
      manager.set('selectedContact', context);
      manager.goToState('showContact');
    }
  }),
  showContact: Em.ViewState.create({
    enter: function(manager, transition) {
      var contactToShow = manager.get('selectedContact');
      ...
    }
    ...
  })
})

このパラメータを状態間で受け渡すためのより良い方法はありますか?

4

2 に答える 2

2

Tom Daleは、これに対処するためにtransitionToメソッドを追加しました。transitionToは、ターゲット状態の名前とともにコンテキストオブジェクトを受け取ります。今、あなたの行動の中で、あなたは次のようなことをすることができます、

viewStates = Ember.StateManager.create({
  showingPeople: Ember.ViewState.create({
    view: ContactListView
  }),

  showDetailAction: function(mgr, selectedPerson) {
    mgr.transitionTo('showingPersonDetail', selectedPerson);
  },

  showingPersonDetail: Ember.ViewState.create({
    setupContext: function(manager, context) {
      this.set('person', context);
    },
    view: PersonDetailView
  })
})

また、次のように、より洗練された複数の状態のパラメーターを渡すこともできます。

stateManager.transitionTo(['planters', { company: true }], ['nuts', { product: true }]);
于 2012-05-19T09:55:58.630 に答える
1

私はEmberの専門家ではありませんstateManager.send()が、2番目の引数が状態間で渡したいオブジェクトになるメソッドを使用してこれを実現できると思います。

あなたの答えのほとんどはEmber.StateManagerのドキュメントにあります。

Emberで、ここgoToState()のメソッドの追加のパラメーターについて話しているプルリクエストがありましたが、joewestがtomdaleでここで述べているように、内部でのみ使用する必要があるため、クローズされました。goToState()

goToStateは、州内からのみ呼び出す必要があります。これを実現するには、追加のパラメーターを受け取るアクションを実装し、goToStateを呼び出すようにします。

于 2012-05-15T16:44:39.613 に答える