Ind*_*ial 2 jquery eval getscript backbone.js
我已经考虑过如何在backbone.js-application中包含文件.在生产中,我显然会加入我的文件并最小化它们以保持最低要求,但在开发过程中,只需加载所有文件并且不必为每一个小变化调用一个buildscript就好了.
所以我看了一下jQuery' getScript()方法.我尝试了,并能够加载我的文件.
当我将getScript-call放入一个函数时,为了确保在我启动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());
Run Code Online (Sandbox Code Playgroud)
首先,你只是调用loader()而不是传递函数:
$(document).ready(loader);
Run Code Online (Sandbox Code Playgroud)
将解决这个问题
其次,您正在调用init回调,而不是在加载所有脚本时.如果有许多脚本,您需要使用promises:
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";
});
Run Code Online (Sandbox Code Playgroud)
上面使用的语法是$.when( promise1, promise2, ...).then( successCallback, failureCallback)- 我们用promises填充数组并使用.apply它们作为参数.
http://api.jquery.com/jQuery.when/
http://api.jquery.com/Deferred.then/
| 归档时间: |
|
| 查看次数: |
1191 次 |
| 最近记录: |