1

我正在尝试大规模更新基于 php/codeigniter 的网站的 javascript。它有很多很多用于加载到某些页面上的代码的 php 部分,但只有一个页脚,页眉。大多数部分都有用于加载 javascript 的内联脚本标签。这需要修复,并且由于该站点非常模块化,组件在页面中多次使用,因此 require.js 似乎是一个很好的解决方案。

所以,它是实例化 javascript,我们通常这样做。

<script type="javascript" src="../js/scriptname.js">
<script type="javascript">
     DP.scriptname.init(parameters)
</script>

我想摆脱这一点,只为使用 require 的 js 提供一个入口点。

我的问题是:使用 require 为某些页面实例化 javascript 的最佳方法是什么?我是否需要继续将我的脚本包含在部分中,然后执行诸如为该特定页面编写一个 require 模块然后将其全部包装在我的数据主脚本中这样的事情?我们也计划使用 Backbone 和 Marionette,但我将无法使用 Backbone 路由器执行任何操作,例如设置哈希 URL。我应该使用 URL 来实例化我的 require 模块吗?

好的,希望有人可以帮忙。我的经验通常是建立单页网站。这是不同的。谢谢

凸轮

4

2 回答 2

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

于 2013-11-02T17:53:37.413 回答
0

这个问题似乎出现了很多,所以我会指出一些可能有帮助的资源:

于 2013-11-03T13:58:00.267 回答