2013-10-08 88 views
0

我有这个包含一些函数的js文件,例如文件x.js在dojo代码中包含javascript函数

我需要在其他文件中重用x.js中的函数,所以我不写两次相同的函数。我尝试了“dojo/request/script”,但它不起作用。

有没有关于如何导入这些函数的建议?

回答

2

理想情况下,您应该将文件制作成AMD模块。例如,如果你的my/AB.js包含此:

function f1(x) { /*..*/ } 
function f2(y) { /*..*/ } 

你应该把它改写为:

define([], function() { 
    return { 
    f1: function(x) { /*..*/ }, 
    f2: function(y) { /*..*/ } 
    } 
}); 

然后,在你的其他JavaScript文件(S),你可以使用require加载它。

require(['my/AB'], function(AB) { 
    AB.f1('foo'); 
    AB.f2('bar'); 
}); 

注意,有没有.js扩展在my/AB!)

这样做,你在AB.js功能不再在全球范围内的利益,也就是说,它们不会与其他人的职能发生冲突。它还允许您稍后使用Dojo构建系统部署优化的组合文件。

但是,这并不总是可行的。也许其他JS文件依赖于全球范围内的f1f2。但是,您也可以通过添加.js扩展插件来使用Dojo的加载器加载非AMD常规文件。

require(['my/AB.js'], function() { 
    window.f1('foo'); 
    window.f2('bar'); 
}); 

注意,在所有这些情况下,我认为你的代码是在一个名为my目录。无论您的实际目录是什么,都需要在dojoConfig中告诉Dojo加载器。

<script type="text/javascript"> 
    var dojoConfig = { 
    baseUrl: ".....", 
    // your other config parameters, 
    packages: [ 'my', '../folder/relative/to/baseUrl/my' ] 
    }; 
</script> 
<!-- your inclusion of dojo.js somewhere below this --> 

PS:实际上,你可以从任意位置太加载JS文件:

require(['http://example.com/js/my/AB.js'], function() { 
    window.f1('foo'); 
    window.f2('bar'); 
}); 
+0

完美。 我非常感谢你的帮助Frode。 – Tarek

相关问题