web-dev-qa-db-ja.com

model.save()で成功コールバックをトリガーするにはどうすればよいですか?

this.model.save({
  success: function(model, response){
    console.log('success');
  },
  error: function(){
    console.log('error');
  }
})

モデルは保存を処理するサーバーに正しくポストされますが、成功コールバックは起動されません。サーバーから何かを返送する必要がありますか?

106
Running Turtle

Saveの最初の引数は、モデルに保存する属性です。

this.model.save( {att1 : "value"}, {success :handler1, error: handler2});
122
Julien

何らかのunknown理由のため、上記の方法はどれもうまくいきませんでした。私の場合、APIはヒットしませんでした。

しかし、後でこれを検索しているときに、最初のパラメーターとして{}の代わりにnullを試した このリンク にぶつかりました。

this.model.save(null, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

だから、これは私のために働いた。これがあなたにも役立つことを願っています。

58
Yasser

サーバーはJSONオブジェクトを返す必要があります。応答がJSONオブジェクトでない場合、コールバックは発生しません。

サーバーが正常にJSONオブジェクトを返さない場合は、次のようにdataType: "text"オプションで保存を実行します。

this.model.save([],{
 dataType:"text",
 success:function() {},
 error:function() {}
});

このオプションを使用すると、応答でJSONを待機するのではなく、テキストを待機するため、コールバックが開始されます。

37
Igor G.

バックボーンはすでにこれに依存しているため、次のようにアンダースコアlibを使用できます。 saveの最初の引数は属性を持っている必要があります。モデル自体を保存する場合は{}を渡すだけです。

this.model.save({}, _.bind(function(model, response){
  //Do whatever you want e.g.
  this.collection.add(model)
}, this))
11

少し混乱しています-保存イベントを呼び出すためにすべての属性を渡す必要がありますか?モデルが大きい場合はどうなりますか。すべてのプロパティを手動で設定したくない

model.saveを呼び出して、次のことを試みます。

_this.model.save(
    {
        success: function (model, response) {
            console.log('model saved');
        }
    });
_

誰かがこの投稿を見つけた場合に備えて、私自身の質問に答えるためだけに、私は次のことを行いました:

_this.model.save({ id: this.model.get('id') },
    {
        success: function (model, response) {
            console.log("success");
        },
        error: function (model, response) {
            console.log("error");
        }
    });
_

編集:何らかの理由で返信できませんでしたが、編集できます

ただし、idを設定する必要はありません:this.model.get('id')空白のオブジェクトを渡すことができます。空白の属性は属性を拡張しないだけで、何もしないからです。

_this.model.save({}, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});
_
8
nologo

以下は、バックボーンモデルの保存に使用しているコードです。

this.model.save(model,{
   success:function(model){
       console.log("Saved Successfully");
   },
   error:function(model){
       console.log("Error");
   }
});

乾杯

ロイ・M・J

4
Roy M J

関数を初期化する際に、syncメソッドを定義したメソッドにバインドします(onSaveSuccess)

            initialize: function (options) {
                    this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
            onSaveSuccess: function() {
                console.log('saved');
                this.render();
            },

これにより、this.model.save()を実行するたびに、同期が成功した場合にコールバックとしてonSaveSuccess関数が実行されます

1
Peter Graham

属性を更新せずにモデルを保存する必要がある場合は、次を実行できます。

model.once("sync", function(model, response, options){
    //
});
model.once("error", function(model, response, options){
    //
});
model.save();
1
timborden