【问题标题】:How do I instantiate require.js modules on different pages, partials with codeigniter?如何在不同的页面上实例化 require.js 模块,使用 codeigniter 的部分?
【发布时间】:2013-11-03 21:58:00
【问题描述】:

我正在尝试大规模更新基于 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 模块,然后将其全部包装在我的数据主脚本中,如this?我们也计划使用 Backbone 和 Marionette,但我将无法使用 Backbone 路由器执行任何操作,例如设置哈希 URL。我应该使用 URL 来实例化我的 require 模块吗?

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

摄像头

【问题讨论】:

    标签: javascript php codeigniter requirejs organization


    【解决方案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

    【讨论】:

    • 感谢 v2p,但我不明白这有什么帮助。如何仅在我希望它触发的 url 上触发脚本的初始化,而整个项目只有一个脚本标签?我应该使用骨干木偶路由器来查看我的网址,然后根据需要触发适当的代码吗?我想得越多,与 require.js 问题相反,这似乎是一个主干。
    【解决方案2】:

    这个问题似乎经常出现,所以我会为您指出一些可能有帮助的资源:

    【讨论】:

    • 虽然使用这些解决方案,我是否不必在我的代码库中有多个脚本标签(而不是将其保留在我的一个页脚部分中)并且我不必使用该脚本部分内的标签,这将放在我的页面中间的某个地方标记。我真的不喜欢这样做的想法。难道没有其他的方式来组织事情吗?谢谢西蒙。
    猜你喜欢
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多