8

投稿を作成した後に移行したい。

投稿/新規>送信をクリック>レールバックエンドが投稿を正常に作成し、jsonを応答>新しく作成された投稿のパスにリダイレクト

ember_data_example github ソース コード内。彼らはこのアプローチを使用します

 transitionAfterSave: function() {
     // when creating new records, it's necessary to wait for the record to be assigned
     // an id before we can transition to its route (which depends on its id)
     if (this.get('content.id')) {
       this.transitionToRoute('contact', this.get('content'));
     }
 }.observes('content.id'),

モデルの作成時にモデルの ID は null であり、この関数はモデル ID の変更を監視するため、モデルの保存が成功すると ID が変更されるため、正常に動作します。

ただし、モデルの ID プロパティが変更されるたびに、この関数が実行される可能性があります。もっとセマンティックな方法を見つけています。

モデルのステータスが 'isDirty' = false && 'isNew' == true フォーム 'isDirty' = true, 'isNew' = false に変更されたときにトランジションが実行されるようにします。

どうすればこれを実装できますか?

4

3 に答える 3

20

理想的には、IDは変更されないはずです。ただし、意味的には正しいですが、この方法は正しくないようです。

これを行うためのよりクリーンな方法があります:

save: function(contact) {
  contact.one('didCreate', this, function(){
    this.transitionToRoute('contact', contact);
  });

  this.get('store').commit();
}

UPDATE 2013-11-27(ED 1.0ベータ版):

save: function(contact) {
  var self = this;
  contact.save().then(function() {
    self.transitionToRoute('contact', contact);
  });
}
于 2013-02-20T14:46:53.880 に答える
4

Ember 2.4 に関する注記 コンポーネントまたはルート レベルで保存アクションを処理すること (およびコントローラーを回避すること) が推奨されます。以下に例を示します。遷移中のモデル オブジェクトの id に注意してください。また、ルートで transitionToRoute ではなく transitionTo を使用する方法に注意してください。

  actions: {
    save() {
      var new_contact = this.modelFor('contact.new');
      new_contact.save().then((contact) => {
        this.transitionTo('contact.show', contact.id);
      });
    },
于 2016-04-11T01:49:12.013 に答える
3
    actions: {
        buttonClick: function () {
            Ember.debug('Saving Hipster');
            this.get('model').save()
                .then(function (result) {
                    this.transitionToRoute('hipster.view', result);
                }.bind(this));
        }
    }
于 2013-10-12T22:15:05.347 に答える