javascript - 在 Backbone.js 中创建自定义 "sync"方法

标签 javascript backbone.js underscore.js

在 backbone 中创建一个自定义的 sync() 方法。

我想“正确”地做这件事,尽可能少地干扰 Backbone 的正常功能。

这是我目前的代码:

var CustomSyncModel = Backbone.Model.extend({
    sync:function(method, model, options){
        var params = {
            type: 'POST'
            url: model.url(),
            error: function(jqXHR, textStatus, errorThrown){
                alert('error');
            },
            success: function(data, textStatus, jqXHR){
                model.parse(data);
            }
        };
        // Got this from line 1359 in Backbone.js developement library
        //     version 0.9.2:
        $.ajax(_.extend(params, options));
    }
 });

我遇到的问题是行:$.ajax(_.extend(params, options)); 似乎覆盖了自定义的 successerror 我创建的函数。但我也担心会干扰任何自定义回调或可能已在使用此模型的应用程序中其他地方指定的其他功能。

覆盖 Backbone 的 sync() 方法的“正确”方法是什么?

谢谢!

最佳答案

如果你看Model#fetch您会看到 Backbone 使用的常用方法:

fetch: function(options) {
  //...
  var success = options.success;
  options.success = function(resp, status, xhr) {
    if (!model.set(model.parse(resp, xhr), options)) return false;
    if (success) success(model, resp);
  };
  //...
}

因此 Backbone 只是用调用原始函数的新函数替换了该函数。在你的情况下,你会有这样的事情:

// We don't own options so we shouldn't modify it,
// but we can do whatever we want to a clone.
options = _(options).clone()

// Replace options.error with a wrapper.
var error = options.error;
options.error = function(jqXHR, textStatus, errorThrown) {
    alert('error');
    if(error)
        error(jqXHR, textStatus, errorThrown);
};

// Replace options.success with a wrapper.
var success = options.success;
options.success = function(data, textStatus, jqXHR) {
    model.parse(data);
    if(success)
        success(data, textStatus, jqXHR);
};

// We don't need error or success in here anymore.
var params = {
    type: 'POST',
    url:   model.url() 
};
$.ajax(_.extend(params, options));

顺便说一句,您的 model.parse(data); 在您的 success 处理程序中可能没有做任何有用的事情,parse应该只是一个简单的过滤器,所以你想用 model.parse(data) 返回值做一些事情(比如 model.set 调用)。

关于javascript - 在 Backbone.js 中创建自定义 "sync"方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028829/

相关文章:

javascript - 根据属性值 angularJs 将类添加到特定列表项

Javascript 类 Getter Setter

javascript - 带有条件 OR 运算符的简写 switch 语句

javascript - 通过其父 ID 选择 ID

jquery - 在 SugarPro 中设置电子邮件字段的值

javascript - 使用 Javascript 下划线删除重复对象

javascript - 使用 TypeScript/JS/RxJS/map/reduce/filter 等将嵌套 JSON 转换为平面 JSON,

javascript - 填充输入后自动添加一个div

Backbone.js:如何从一个 View 重定向到另一个 View ?

jquery - 如何使用 Backone 销毁 View 及其内部的任何模型