我有一个相当大的 Backbone.js 项目,所以我希望延迟加载尽可能多的资源。
考虑一个 View 需要加载它自己的模板、一些 subview 模板和一个集合。 (我不想在请求下一个之前必须等待每个异步依赖项都解决。)如果我能做类似的事情会很有帮助......
initialize: function() {
$.when([
Handlebars.get('Template1', callback), // callback sets this.template
Handlebars.get('Template2', callback), // callback sets subview template
App.Store.get('MessageCollection', callback) // callback sets this.collection
]).then($.proxy(this.render, this)); // render
}
get
函数是我构建的一些帮助程序,如果资源存在于缓存/存储中,它会提供资源,否则它将返回延迟对象...
return $.ajax(...)
所以这些 get
助手无论如何都需要返回一个 jquery 延迟对象。当在缓存/存储中找到资源时,返回已解析的延迟对象是否有任何问题?
App.Store.get = function(resource, callback) {
if (resource exists) {
return $.Deferred().done(callback).resolve();
} else {
var model = new App.Model;
return model.fetch();
}
}
这会导致任何问题吗?有一个更好的方法吗?
最佳答案
通常,您的方法应该按原样工作。 你可以使用 jquery.whenall插件以便并行等待多个请求。
但如果项目实际上比加载几个模板更复杂,您可能应该查看一些 AMD 解决方案,例如 require.js
关于javascript - 使用 jQuery Deferred 对象解决许多 Backbone 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18026348/