簡體   English   中英

如何使用backbone.js保存而不指定哪些屬性但使用回調

[英]How to save with backbone.js without specifying which attributes but with a callback

我想將修改后的模型保存到數據庫中(之前設置)。 如果保存成功重定向到另一個頁面(例如,可以是任何其他操作)。

Model.save可以有兩個可選屬性。 第一個是屬性的哈希,第二個是選項(如成功和錯誤回調)。 http://backbonejs.org/#Model-save

 somemodel.set({foo: 'bar'});
//lots of other logic and misc steps the user has to do
 somemodel.save(); //on success should go here

由於屬性已經設置,我只需要回調。

過去我做過:

somemodel.save(somemodel.toJSON(), { 
    success: function() { 
        //other stuff
    }
);

或者將值再次傳遞給save方法

somemodel.save(
    { foo: this.$('input').val()}, 
    { success: function(){}
);

我正在尋找一種方法來清理它。 文檔說明,如果有新屬性,模型將觸發更改狀態。 但是我想要重定向用戶(保存新內容或舊/未更改)。

這不存在:

somemodel.on('success', function(){}); 

而這只是用於驗證:

if(somemodel.save()) { //action }

“同步”也是錯誤的事件(因為它也適用於銷毀)

有幫助嗎?

somemodel.save(
    {}, // or null
    { 
            success: function(){}
    }
);

將允許您使用特定回調保存模型,而無需修改現有密鑰。

還有一個小提琴http://jsfiddle.net/h5ncaayu/

為避免將成功回調作為選項傳遞,您可以

  • 使用save返回的promise:

     somemodel.save().then(...youcallback...) 
  • 或使用活動:

     somemodel.on('sync', ...youcallback...); somemodel.save(); 

Backbone.Model有一個非常方便的方法叫做“changedAttributes”,它將返回一個可以傳遞給保存的已更改屬性的哈希值。 所以...

model.save(
   model.changedAttributes(),
   {
       success : _.bind(function() {...},this), //_.bind() will give scope to current "this"
       error : _.bind(function() {...},this);
   }
);

漂亮又整潔......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM