如何为新模型禁用Backbone.sync,并在用户点击保存按钮后重新启用sync*

Max*_* L. 10 javascript backbone.js

我有一个Backbone集合模型(子模型作为元素)和视图来编辑它.

我希望在最初创建模型时,"关闭"同步,所以在用户点击按钮之前永远不会调用后端,然后我想"打开"同步,并调用保存根模型上的方法,以便将其保存到DB.一旦它保存的模型,它应该像普通模型一样.

目标是避免保存,直到用户确定他对他输入的内容感到满意为止.

isN*_*247 17

Backbone最初会sync在去之前寻找模型的本地函数Backbone.sync.

Backbone.js文档:同步功能可以全局覆盖Backbone.sync,或者通过向Backbone集合或单个模型添加同步功能,以更细粒度的级别覆盖.

因此你可以这样做:

var MyModel = Backbone.Model.extend({
    // New instances of this model will have a 'dud' sync function
    sync: function () { return false; }
});

var MyView = Backbone.View.extend({

   ...

   events : {
       'click #my-button' : 'enableSync',
       'click #my-save-button' : 'saveModel'
   },

   enableSync: function () {
       // If this view's model is still pointing to our fake sync function,
       // update it so that it references Backbone.sync going forward.
       if (this.model.sync !== Backbone.sync) {
          this.model.sync = Backbone.sync;
       }
   },

   saveModel: function () {
       // This won't actually do anything until we click '#my-button'
       this.model.save();
   }

   ...

});

var view = new MyView({ model: new MyModel() });
Run Code Online (Sandbox Code Playgroud)