jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 我可以使用jQuery的deferred.pipe方法来修改提供给已解决/失败回调的参数吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够使用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回调.据我所知,管道只能修改提供的参数,而不是添加.任何建议,将不胜感激.

编辑:这是一个非常简化的例子;因为在原始集合上创建了一个闭包,@R_422_9447@对它进行操作.但是,用例是多个BACkbone Views可能依赖于被提取的相同数据,因此我希望能够将jQuery Deferred对象提供给这些视图,而不是Deferred和collection实例.

一个编辑:在下面发布解决方案,但欢迎任何其他建议.

解决方法@H_618_12@
我发现我可以通过让.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);
};

大佬总结

以上是大佬教程为你收集整理的javascript – 我可以使用jQuery的deferred.pipe方法来修改提供给已解决/失败回调的参数吗?全部内容,希望文章能够帮你解决javascript – 我可以使用jQuery的deferred.pipe方法来修改提供给已解决/失败回调的参数吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。