在 Backbone.js 中创建自定义“同步”方法
Creating a custom "sync" method in Backbone.js
在主干中创建自定义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));
行似乎覆盖了我创建的自定义success
和error
函数。但我也担心干扰任何自定义回调或其他功能,这些功能可能已在使用此模型的应用程序的其他位置指定。
覆盖骨干网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));
顺便说一句,您在success
处理程序中的model.parse(data);
可能没有做任何有用的事情,parse
应该只是一个简单的过滤器,因此您希望对model.parse(data)
返回值执行某些操作(例如model.set
调用)。
相关文章:
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 有没有更好的方法将音频与视频同步(只需将其放在视频中即可)
- 在 Backbone.js 中创建自定义“同步”方法
- 将同步函数包装到承诺中的最佳方法是什么?
- 并行开发同步/阻塞和异步/非阻塞库api的好方法是什么?(JavaScript)
- 是否有一种方法可以在节点中同步执行多个JavaScript文件
- 使用jsonp解决方法进行同步ajax调用
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- 执行 ajax 同步 POST 然后提交表单的正确方法
- 如何将嵌套_.each转换为同步方法?首选使用 Promise 或 Async.waterfall
- 如何在节点/环回中同步调用 model.find 方法
- 主干本地存储不使用良好的同步方法
- 如何在 Javascript 中编写阻塞同步方法
- 如何调用父主干同步方法
- 对于node.js中的本地文件,我应该使用异步文件IO方法而不是同步方法吗?
- 覆盖骨干网中的同步方法
- 同步方法和异步方法的区别是什么?
- 主干:使用自定义同步方法调用success
- 如何在同步方法中使用异步方法
- 如何构建嵌套的backbone.js模型,这些模型可以被不同的底层同步方法重用