我正在尝试在基于php/codeigniter的大规模网站上更新javascript。它有很多很多 php 部分,用于将代码加载到某些页面上,但只有一个页脚,即页眉。大多数部分都有内联脚本标签,用于加载javascript。这需要修复,并且由于该站点非常模块化,组件在页面上多次使用,因此需要.js似乎是一个很好的解决方案。
所以,它是实例化的javascript,我们通常这样做。
<script type="javascript" src="../js/scriptname.js">
<script type="javascript">
DP.scriptname.init(parameters)
</script>
我想摆脱这种情况,只有一个使用 require 的 js 入口点。
我的问题是:使用 require 为某些页面实例化 javascript 的最佳方法是什么?我是否需要继续在部分中包含我的脚本,然后做一些事情,例如为该特定页面编写一个 require 模块,然后将其全部包装在我的数据主脚本中,如下所示?我们也计划使用Backbone和木偶,但我将无法使用Backbone路由器来做任何事情,比如设置哈希URL。我应该使用 URL 来实例化我的需求模块吗?
好的,希望有人能帮忙。我的经验通常是构建单页网站。这是不同的。谢谢
凸轮
,如果我正确理解您的问题,您可以以这种方式使用"需要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>
希望这有帮助。
注意。我的解决方案基于官方需要JS文档的这一部分:http://requirejs.org/docs/api.html#jsfiles
这个问题似乎经常出现,所以我会向你指出一些可能有帮助的资源:
- RequireJS 如何处理多个页面和部分视图? - https://stackoverflow.com/a/10816983/617615
- 带有 RequireJS 的模块化 HTML 组件 - http://simonsmith.io/modular-html-components-with-requirejs/
- 示例基于 RequireJS 的项目,该项目具有共享一组通用模块的多个页面 - https://github.com/requirejs/example-multipage