7

我想将更改后的模型保存到数据库(之前设置)。如果保存成功重定向到另一个页面(例如,可以是任何其他操作)。

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 }

“同步”也是错误的事件(因为它也适用于销毁)

有什么帮助吗?

4

2 回答 2

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

将允许您在不修改现有键的情况下保存具有特定回调的模型。

还有一个小提琴http://jsfiddle.net/h5ncaayu/

为避免将成功回调作为选项传递,您可以

  • 使用返回的承诺save

    somemodel.save().then(...youcallback...)
    
  • 或使用事件:

    somemodel.on('sync', ...youcallback...);
    somemodel.save();
    
于 2012-07-31T13:15:05.167 回答
3

Backbone.Model 有一个非常方便的方法,称为“changedAttributes”,它会返回一个更改属性的哈希值,您可以将其传递给保存。所以...

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

漂亮又整洁...

于 2012-07-31T17:46:48.163 回答