我正在检查来自 Backbone JQuery 移动示例应用程序 http://jquerymobile.com/test/docs/pages/backbone-require.html的代码
并在集合对象中找到以下内容
// 覆盖 Backbone.sync 方法(Backbone.fetch 方法在尝试获取数据时调用 sync 方法) 同步:函数(方法、模型、选项){ // 局部变量 // =============== // 实例化一个空数组 var 类别 = [], // 将 this 上下文存储在 self 变量中 自我=这个, // 创建一个 jQuery 延迟对象 延迟 = $.Deferred(); // 使用 setTimeout 模拟一个异步检索数据的真实世界应用程序 设置超时(函数(){ // 过滤上述示例 JSON 数据以返回仅包含正确类别类型的数组 类别= _.filter(self.jsonArray,函数(行){ 返回 row.category === self.type; }); // 调用 options.success 方法并传递一个对象数组(内部将这些对象作为模型保存到当前集合中) options.success(类别); // 触发自定义的 `adding` 方法(Category View 监听) self.trigger("添加"); // 解析延迟对象(这会触发类别路由器内部的 changePage 方法) deferred.resolve(); }, 1000); // 返回延迟对象 延期退货; }
我只是想了解 deferred 被声明和返回的部分,为什么我们甚至需要那个?没有附加回调。而且我真的不明白为什么我们使用 setTimeout 并在其中解析延迟对象。