sob*_*3ch 3 javascript backbone.js backbone-views
这个例子来自Backbone目录演示应用程序 https://github.com/ccoenraets/backbone-directory/blob/master/web/js/utils.js#L11
// The Template Loader. Used to asynchronously load templates located in separate .html files
window.templateLoader = {
load: function(views, callback) {
var deferreds = [];
$.each(views, function(index, view) {
if (window[view]) {
deferreds.push($.get('tpl/' + view + '.html', function(data) {
window[view].prototype.template = _.template(data);
}, 'html'));
} else {
alert(view + " not found");
}
});
$.when.apply(null, deferreds).done(callback);
}
};
Run Code Online (Sandbox Code Playgroud)
使用字符串数组[views]和[callback]函数初始化它.
我的问题是,如果(据我所知)之前没有初始化窗口[view](点击上面链接到代码中的确切位置)是如何检查的?如果我不准确,请在评论中写下.
如果我正确地理解了你的问题,那么当你打电话给templateLoader.load你时,你会传递两个论点; views和callback.我们可以假设这views是一个数组,因为我们然后使用jQuery .each()方法迭代该数组.回调.each()函数传递给与views当前迭代对应的数组元素.那个论点被命名了view.
那么view存储在views数组中的是一些任意值.然后,我们尝试window使用与其值匹配的标识符来查找属性view.如果view === "james"我们正在寻找window.james.
如果您查看该应用程序中的某些视图,您将看到它们的定义如下:
window.ContactView = Backbone.View.extend({
// Some methods
});
Run Code Online (Sandbox Code Playgroud)
所以ContactView是属性window,我们可以templateLoader.load像下面这样调用来加载该模板:
templateLoader.load(["ContactView"], someCallbackFn);
Run Code Online (Sandbox Code Playgroud)
所以实际发生的是在一系列属性window中定义的各种其他文件,然后由模板加载器加载,通过传递一组标识符.
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |