我希望能够使用jQuery的Deferred对象来操作通过Backbone Collections和Models加载数据.有没有什么办法可以修改提供给完成和失败回调的参数来包含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 });
当然,由于filter返回一个数组,因此使用数组而不是枚举参数调用done回调.据我所知,管道只能修改提供的参数,而不是添加.任何建议,将不胜感激.
编辑:这是一个非常简化的例子;因为在原始集合上创建了一个闭包,所以我可以对它进行操作.但是,用例是多个Backbone Views可能依赖于被提取的相同数据,因此我希望能够将jQuery Deferred对象提供给这些视图,而不是Deferred和collection实例.
解决方法
我发现我可以通过让.pipe方法返回一个新的$.Deferred来实现这个目的,它会立即使用修改后的参数解析:
var _sync = Backbone.sync; Backbone.sync = function() { var jqXhr = _sync.apply(this,arguments); var self = this; var deferred = jqXhr.pipe(function() { var cbArgs = [self]; cbArgs.push.apply(cbArgs,arguments); var deferred = new $.Deferred(); return deferred.resolve.apply(deferred,cbArgs); }); return $.extend(true,jqXhr,deferred); };
原文地址:https://www.jb51.cc/jquery/445238.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。