Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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 如何在同一页面中处理两个不同的数据主属性?_Javascript_Requirejs - Fatal编程技术网

Javascript 如何在同一页面中处理两个不同的数据主属性?

Javascript 如何在同一页面中处理两个不同的数据主属性?,javascript,requirejs,Javascript,Requirejs,我正在为web应用程序开发一个插件,它使用许多外部JS,如JStree、bootstrap和jquery。我还使用require动态加载所有这些 所以最终用户要使用这个插件所要做的就是在HTML中包含这一行 <script data-main="http://host.name/pathto/main" src="http://hostname/path.to/require.js"></script> 因此,当有两个不同的RequireJS实例时,它总是加载第一个实

我正在为web应用程序开发一个插件,它使用许多外部JS,如JStree、bootstrap和jquery。我还使用require动态加载所有这些


所以最终用户要使用这个插件所要做的就是在HTML中包含这一行

<script data-main="http://host.name/pathto/main" src="http://hostname/path.to/require.js"></script>

因此,当有两个不同的RequireJS实例时,它总是加载第一个实例的文件,而不包括其他实例。当我们使用RequireJS开发插件时,这种情况下的解决方案是什么?

正如您所发现的,您不能在同一页面上有两个
data main
。加载RequireJS的第一个
标记将加载并执行它,RequireJS将负责在相应的
数据主节点中加载代码。第二个
标记将再次加载并执行RequireJS,但RequireJS将检测到它已经加载,并立即停止执行

您应该通过
require
define
调用或通过配置选项加载插件

如果您的代码需要添加配置,它可以再次调用
require.config()
。RequireJS将传递给
require.config()
的多个配置组合在一起。根据您的用例场景,您可能希望使用该选项将代码使用的配置与主应用程序完全分开。如果您最终不得不使用一个单独的上下文,它将如下所示:

<!-- Load the app. -->
<script data-main="app/lib/main" src="app/lib/require.js"></script>
<!-- Load the plugin. -->
<script>
    var my_require = require.config({
        context: "plugin_context",
        baseUrl:...
    });
    my_require(["main"]);
</script>

var my_require=require.config({
上下文:“插件上下文”,
baseUrl:。。。
});
我的需求([“主”]);

附加模块应通过main.app JS加载。同一页面上不能有两个数据主属性。是的,这是真的,但我不想为了添加额外功能而在apps代码(main.JS)上乱动。是否有一种方法可以获取require的当前配置对象并附加一些我自己的配置对象(如path和dep)?据我所知,require.config()将始终附加参数,并找到与现有参数匹配的参数,然后将其替换为较新的参数,对吗?顺便说一句,我的问题现在解决了。谢谢尽管你可能已经理解了,我还是要解释一下。如果调用
require.config()
时使用
path
设置映射
foo
“/x/foo”
。然后调用
require.config()。2个
路径
设置组合在最终配置中。并不是第二个取代了第一个。这适用于复杂设置(对象和数组),如
路径
垫片
(以及其他一些)。对于原子值的设置,如
baseUrl
(字符串),则只能替换。当您使用
上下文时
,这两个配置完全分开。
<!-- Load the app. -->
<script data-main="app/lib/main" src="app/lib/require.js"></script>
<!-- Load the plugin. -->
<script>
    var my_require = require.config({
        context: "plugin_context",
        baseUrl:...
    });
    my_require(["main"]);
</script>