我正在尝试在大型基于php / codeigniter的网站上更新javascript。它有很多很多部分代码被加载到某些页面上,但只有一个页脚,标题。大多数部分都有内联脚本标记,用于加载javascript。这需要修复,因为站点非常模块化,组件在页面中多次使用,require.js似乎是一个非常好的解决方案。
所以,它是实例化javascript,我们通常会这样做。
<script type="javascript" src="../js/scriptname.js">
<script type="javascript">
DP.scriptname.init(parameters)
</script>
我想摆脱这种情况,并且只需要一个使用require的js的单一入口点。
我的问题是:使用require为某些页面实例化javascript的最佳方法是什么?我是否需要继续在partial中包含我的脚本,然后为该特定页面编写require模块,然后将其全部包含在我的数据主脚本中,如this?我们也计划使用Backbone和Marionette,但是我无法使用Backbone路由器来做任何设置哈希URL的事情。我应该使用URL来实例化我的require模块吗?
好的,希望有人可以提供帮助。我的经验通常是构建单页网站。这是不同的。感谢
凸轮
答案 0 :(得分:1)
好吧,如果我理解你的问题,你可以这样使用Require JS。
首先,编写一个配置,您可以在其中描述模块名称和具体文件之间的映射。例如:
requirejs.config({
baseUrl: 'js/modules' // by default load any module using this path
});
之后,您应该重构现有模块并将其调整为AMD格式(请参阅http://requirejs.org/docs/whyamd.html)
作为这一步的结果,你将有类似的东西(比如文件'js / modules / scriptname.js'):
// module has the same name as the file, which contains it - "scriptname"
define(function () {
// define the module value by returning a value
return function () {};
});
作为最后一步,您可以重构内联脚本并以这种方式使用此模块:
<script type="javascript">
// when we place name of the module as a first argument of the "define"
// function, Require JS find file that contains it and load it asynchronously
define(["scriptname"], function (scriptname) {
// "scriptname" now contains value that we recieve from the module definition
scriptname.init(parameters);
});
</script>
希望这有帮助。
请注意。我的解决方案基于官方Require JS文档的这一部分:http://requirejs.org/docs/api.html#jsfiles
答案 1 :(得分:0)
这个问题似乎出现了很多,所以我会指出一些可能有用的资源: