在另一个文件中扩展名称空间

时间:2014-06-29 02:49:09

标签: javascript

我试图扩展命名空间方法/属性调用另一个文件。 我有这个:

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

该文件已被加入,但并未扩展主文件命名空间,仅适用于包含的文件。为什么会这样?我怎么解决它?

1 个答案:

答案 0 :(得分:0)

问题是在jquery中异步加载脚本,用$ .ajax替换$ .getScript解决问题:

$.ajax({
    url: ns.libsPath+"super-foo.js",
    dataType: "script",
    async : false,
    success: function(){
        console.log("done");
    }
});