2011-11-02 43 views
3

我们需要能够处理骨干之前和之后保存事件。保存事件之前和之后的骨干js

基本上,当我们有一个保存的负载发生,我们想显示一个“保存...”的消息。不知道Backbine如何处理批次保存,但如果有一个队列我们希望能够在处理批处理之前显示,然后在处理完成后移除。

Backbone中是否有这样的东西?

回答

2

在您拨打保存之前,只需显示您的信息。所以有以前的情况。

至于后面你可以传递成功函数。 save方法需要2个可选参数。唯一的警告是,第一个总是必须是属性。

yourModel.save({ 
    attr1: attr1, 
    attr2: attr2 
}, 
{ 
    success: function(model, response) 
    { 
     //do whatever 
    } 
}); 
+4

这很麻烦,因为我们必须在我们称之为保存的任何地方执行此操作。另外 - 这对集合没有好处:( – iwayneo

+0

)你可以在mixin中抽象出这个行为(一个包含函数的散列对象),并将它包含在视图中 – dira

+0

是的,我从来没有说过我认为它很漂亮。一个简单的方法就是使用模型现有的属性,不幸的是,如果不先传入某个属性参数,就无法传递成功函数来保存。 – mccow002

1

如何覆盖Backbone.Model.save?快速执行:

Backbone.Model._amountOfModelsSaving = 0; 
Backbone.Model._save = Backbone.Model.save; 
Backbone.Model.save = function() { 
    if (Backbone.Model._amountOfModelsSaving === 0) { 
     // Show the message 
    } 

    Backbone.Model._amountOfModelsSaving++; 
    var request = Backbone.Model._save.apply(this, arguments); 
    request.always(function() { 
     Backbone.Model._amountOfModelsSaving--; 
     if (Backbone.Model._amountOfModelsSaving === 0) { 
      // Hide the message 
     } 
    }); 

    return request; 
} 
+0

对不起,但我该怎么做呢?我根本就不熟悉bb - 这是我继承的代码 – iwayneo

+0

好吧,如果你把它放在一个刚好在Backbone之后加载的文件中,它会替换原来的保存函数(呃,实际上是“代理”) 。 – Paul