问题描述
首先,我主要是C#程序员,他很少尝试使用JavaScript。
我可以为自己编写一些JS代码,只要它基本上是简单的即可。我可以处理jQuery和奇怪的自给自足的第三方库,但是当React,Angular,Bootstrap和其他人进入场景时,我无法从湿纸袋中编写代码。我也不习惯使用npm或任何其他类似的包管理器。
这从来都不是我的工作,也不是我的兴趣,所以我从未去过那里。每当我编写一些JS代码时,我都会在<script>
标签中引用所需的JS文件,然后尽可能直接地使用它们。
我目前正在创建一个非常简单的概念证明网络应用程序,迟早有能力的人员将重新构建其客户端部分。但是与此同时,我必须提供准系统功能,只要有可能,它就会成为下一个团队接任的粗略指导。
我选择了两个似乎易于使用的库,并且分别使用时可以完成工作。但是,当我尝试在同一页面上一起使用它们时,我遇到了一个问题:它们的主要类型都使用相同的名称,而且我似乎无法消除它们之间的歧义。
这些是库:
它们都声明了一个名为jsoneditor
的类型,只要我不一次引用两个库就可以使用。
到目前为止,我尝试通过使用模块和使用不同名称的import
-类型来解决此问题,但这没有用...我在控制台中遇到了很多有关“导入”的错误未找到”和“未定义e”,这使我认为我正在解决此错误。
如果可能,我将如何使用普通JS解决此问题?
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test Page</title>
<link href="/lib/jsoneditor/jsoneditor.min.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="container">
<div id="editor" style="width: 300px; height: 200px;"></div>
<div id="form"></div>
</div>
<!--library 1: https://github.com/josdejong/jsoneditor -->
<script src="/lib/jsoneditor/jsoneditor.min.js"></script>
<!--library 2: https://github.com/jdorn/json-editor -->
<script src="/lib/jsonform/jsonform.min.js"></script>
<script>
// Library 1: The JSON code editor.
var editor = new jsoneditor(document.getElementById("editor"),{ mode: "code" });
// Library 2: The form builder.
var form = new jsoneditor(document.getElementById("form"),{
ajax: true,schema: {
$ref: "/api/describe/service/test"
}
});
</script>
</body>
</html>
如果我注释掉一个库的使用(以任何一个为准),另一个库将按预期工作,并且内容将显示在相应的目标<div>
上。但是,如果如上所述我一次尝试两次,则不会显示任何内容,并且以下错误将输出到控制台:
未捕获到的TypeError:t未定义
这种情况发生在var editor = new jsoneditor
行,这让我认为第二个库中的类型会覆盖第一个库并导致问题。
这对我来说是可以理解的,并不是问题本身。问题是我不知道如何导入两种jsoneditor
类型,以便可以分别引用它们。
解决方法
代码编辑器的维护者(JSON编辑器,而不是JSON Schema Form Builder)过去已经解决并解决了一个与此有关的问题:https://github.com/josdejong/jsoneditor/issues/270
他推荐的解决方案如下:
<script src="assets/jsoneditor/dist/jsoneditor.min.js"></script> <script> var JSONEditorA = JSONEditor; </script> <script src="assets/json-editor/dist/jsoneditor.min.js"></script> <script> var JSONEditorB = JSONEditor; </script>
如果必须使用脚本标签,这可能是解决方法。