Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RequireJS:运行页面特定模块的最佳方法?_Javascript_Modularity_Requirejs - Fatal编程技术网

Javascript RequireJS:运行页面特定模块的最佳方法?

Javascript RequireJS:运行页面特定模块的最佳方法?,javascript,modularity,requirejs,Javascript,Modularity,Requirejs,示例: var myModules = {}; myModules.pageTitle = (function(){ return { init: function(){ alert('this module has been initiated'); } } })(); myModules[page].init(); mysite.com/page1依赖于module1.js中的脚本 mysite.co

示例:

var myModules = {};

myModules.pageTitle = (function(){

    return {
          init: function(){
             alert('this module has been initiated');
          }
    }
})();


myModules[page].init();
mysite.com/page1
依赖于
module1.js中的脚本

mysite.com/page2
依赖于
module2.js中的脚本

mysite.com/page3
依赖于
module3.js中的脚本

是否有人有任何只运行特定页面所需Javascript的最佳实践。在开始使用RequireJS之前,我只会使用一个Javascript文件,并且只初始化该页面所需的模块。像这样


在第
页中:


在主JS文件中:

var myModules = {};

myModules.pageTitle = (function(){

    return {
          init: function(){
             alert('this module has been initiated');
          }
    }
})();


myModules[page].init();


不太确定这样的技术如何与RequireJS配合使用。您希望得到一些反馈和建议,了解其他人是如何做到这一点的。

我想您的所有页面都有一个main.js文件

无论如何,通常您会使用脚本标记的datamain属性,如API文档中所解释的,这意味着您每页有一个主js文件。这样,您就可以摆脱页面中的文字javascript代码,并充分利用RequireJS优化步骤

示例:

var myModules = {};

myModules.pageTitle = (function(){

    return {
          init: function(){
             alert('this module has been initiated');
          }
    }
})();


myModules[page].init();

将main.js文件开发为RequireJS模块:

define([<dependencies go here>], function(){

    return function(pageTitle){
        //do you page dependent logic here
    }
}
定义([],函数(){
返回函数(页面标题){
//这里有页面相关逻辑吗
}
}
在html中,您将有如下内容:

<html>
<head>
<script src="require.js"></script>
<script>
    require(["main.js"], function(init){
        init("pageTitle");
    });
</script>

require([“main.js”],函数(init){
初始(“页面标题”);
});
1)您在后端使用什么语言

您可以将脚本配置保存在数据库或配置文件中。(例如:页面
page1
包含模块:
module1
module2
module4
,等等)

我有这样一个php模板文件,用于在我的页面上生成
标记:

<script src="http://requirejs.org/docs/release/1.0.1/minified/require.js"></script>
<script>
    require([
        <?php echo "'". implode("',\n\t'", $this->scripts) . "'\n"; ?>
    ], function(a){

        function run(page) {
            if ( window.hasOwnProperty(page) ) {
                window[page].start();
            }
        }

        var page = '<?php echo $this->page; ?>';

        run('all'); // activating scripts needed for every page
        run(page); // and for current page
    });
</script>
您应该将页面名称或页面id传递给
main.js
(您可以在DOM元素中传递此值-在站点的模板中,或在模板变量中)。 因此
main.js
知道页面名称,并加载
modules.json
文件。它获取特定模块,
需要这些模块

main.js
还可以保留每个页面上需要的依赖项(例如jquery、一些jquery插件等)(jquery插件最好包装为模块)


顺便说一句,对不起我的英语

RequireJS的创建者实际上做了一个示例项目,做得非常好:

啊,好的,我明白了。但是,在整个站点上只提供一个文件不是最好的吗?嗯,这可能是有意义的,当然是通过优化步骤。您还可以在html文件中执行以下操作:require([“main.js”],function(init){init(“pageTitle”);});您可以扩展这个概念吗?将main.js文件开发为一个RequireJS模块:
define([],function(){/code>return function(pageTitle){`//doyou page dependent logic here`}