我试图扩展命名空间方法/属性调用另一个文件。 我有这个:
main.js:
(function( ns, $, undefined ) {
'use strict';
ns.libs = {}
ns.libsPath = "http://example.com/libs/";
ns.foo = function foo(){
return "Im a main Foo";
}
//Include file
$.getScript(ns.libsPath+"super-foo.js");
}( window.ns = window.ns || {}, jQuery ));
console.log(ns.foo());//OK
console.log(ns.libs.superFoo());//FAIL
超foo.js
console.log("File Loaded");
(function( ns, $, undefined ) {
'use strict';
ns.libs.superFoo = function(){
return "Im a super Foo";
}
}( window.ns = window.ns || {}, jQuery ));
console.log(ns.foo()); //OK
console.log(ns.libs.superFoo()); //OK
当我运行代码时,我得到了类似的东西:
Im a main Foo //Ok
[Error in main.js method doesnt exists in ns]
File loaded
Im a main Foo
Im a super Foo
该文件已被加入,但并未扩展主文件命名空间,仅适用于包含的文件。为什么会这样?我怎么解决它?
答案 0 :(得分:0)
问题是在jquery中异步加载脚本,用$ .ajax替换$ .getScript解决问题:
$.ajax({
url: ns.libsPath+"super-foo.js",
dataType: "script",
async : false,
success: function(){
console.log("done");
}
});