【发布时间】:2012-10-25 16:33:46
【问题描述】:
我希望能够使用 jQuery 的 Deferred 对象通过 Backbone 集合和模型来操作加载数据。有什么方法可以修改提供给 done 和 fail 回调的参数以包含 Model 或 Collection 实例?我的设想如下:
var _sync = Backbone.sync;
Backbone.sync = function() {
var jqXhr = _sync.apply(this, arguments);
var self = this;
return jqXhr.pipe(function() {
var cbArgs = [self];
cbArgs.push.apply(cbArgs, arguments);
return cbArgs;
}
}
...
var c = new Backbone.Collection();
c.url = "/path/to/resources";
c.fetch().then(function(collection, data, textStatus, jqXhr) {
// do stuff with collection
});
当然,因为过滤器返回一个数组,所以完成回调是用一个数组调用的,而不是枚举的参数。据我所知,管道只能修改提供的参数,不能添加。任何建议将不胜感激。
编辑:这是一个非常简单的例子;由于在原始集合上创建了一个闭包,因此我可以对其进行操作。但是,用例是多个 Backbone 视图可能依赖于获取的相同数据,所以我希望能够只为这些视图提供 jQuery Deferred 对象,而不是 Deferred 和集合实例。
另一个编辑:在下面发布了一个解决方案,但欢迎任何其他建议。
【问题讨论】:
标签: javascript jquery backbone.js jquery-deferred