gpt4 book ai didi

jquery - 为什么在主干同步中返回一个jquery延迟对象?

转载 作者:行者123 更新时间:2023-12-01 01:16:42 24 4
gpt4 key购买 nike

我正在检查 Backbone JQuery 移动示例应用程序中的代码 http://jquerymobile.com/test/docs/pages/backbone-require.html

并在集合对象中发现以下内容

// Overriding the Backbone.sync method (the Backbone.fetch method calls the sync method when trying to fetch data)sync: function( method, model, options ) {            // Local Variables            // ===============            // Instantiates an empty array            var categories = [],                // Stores the this context in the self variable                self = this,                // Creates a jQuery Deferred Object                deferred = $.Deferred();            // Uses a setTimeout to mimic a real world application that retrieves data asynchronously            setTimeout( function() {                // Filters the above sample JSON data to return an array of only the correct category type                categories = _.filter( self.jsonArray, function( row ) {                    return row.category === self.type;                } );                // Calls the options.success method and passes an array of objects (Internally saves these objects as models to the current collection)                options.success( categories );                // Triggers the custom `added` method (which the Category View listens for)                self.trigger( "added" );                // Resolves the deferred object (this triggers the changePage method inside of the Category Router)                deferred.resolve();            }, 1000);            // Returns the deferred object            return deferred;        }

我只是想了解 deferred 的声明和返回部分,为什么我们需要它?没有回调被附加到它。而且我真的不明白为什么我们使用 setTimeout 并在其中解析延迟对象。

最佳答案

延迟对象用于管理异步方法——它对于设置成功/错误回调非常有用,而无需创建令人困惑的嵌套回调 block 。它也非常适合处理需要等待多个异步操作完成的场景。 Deferred 独立于 JQuery AJAX 方法,但由 JQuery AJAX 方法实现。

作为如何在 Backbone 中使用此功能的一个示例,请考虑需要从服务器加载一些 JSON 数据和 HTML 模板的情况。您可能需要完成两个异步调用才能渲染 View 。使用 Deferred 是处理此问题的便捷方法,因为您可以将多个 Promise 对象传递给 when,当所有对象完成时将调用该对象。

有关延迟的信息,值得探索 documentation on the JQuery site .

<小时/>

(请注意,虽然代码中看不到回调,但可以附加成功/错误回调,例如 Backbone.Model.fetch。)

关于jquery - 为什么在主干同步中返回一个jquery延迟对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com