我对于如何在我的backbone.js 应用程序中包含文件进行了很多思考。在生产中,我显然会加入我的文件并最小化它们以将请求保持在最低限度,但在开发过程中,最好只加载所有文件,而不必为每个小更改调用构建脚本。
所以我研究了 jQuery
的 getScript()
方法。我尝试了一下并能够加载我的文件。
由于我已将 getScript
调用放入函数中,以确保在启动backbone.js 应用程序之前加载文件,因此似乎加载的每个脚本都没有包含在全局范围。
var loader = function () {
var scripts = ['/app/routers/myrouter.js'];
for (var i = 0; i < scripts.length; i++) {
$.getScript(scripts[i], function () {});
}
console.log(myrouter); // Works - myrouter is a function
init(); // Callback - we've loaded all scripts
};
var init = function () {
console.log(myrouter); // myrouter is undefined
};
$(document).ready(loader());
最佳答案
首先,您只是调用 loader()
而不是传递函数:
$(document).ready(loader);
会解决这个问题
其次,您将立即调用 init
回调,而不是在加载所有脚本时调用。如果有很多脚本需要使用promise:
var scripts = ['/app/routers/myrouter.js'];
for (var i = 0; i < scripts.length; i++) {
scripts[i] = $.getScript(scripts[i]);
}
$.when.apply( $, scripts ).then( init, function(){
"some script failed";
});
上面使用的语法是$.when(promise1,promise2,...).then(successCallback, failureCallback)
- 我们用promise填充数组并使用.apply
将它们应用为参数。
关于jQuery 的 getScript - 将文件包含到主范围中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953620/