使用require.js加载XML3D

时间:2015-08-14 20:38:16

标签: javascript requirejs xml3d

XML3D不能与require.js一起使用,即使确保首先加载它并使用“shim”配置选项(对于非AMD模块)。

我已经关注了代码:

index.html ,其中包含xml3d标记

<xml3d>
...some stuff..
</xml3>
<script data-main="scripts/main.js" src="scripts/require.js"></script>

main.js

requirejs.config({
  paths: {
    xml3d: *url*
  },
  shim: {
    'xml3d': { exports: 'XML3D' }
  }
});

requirejs(['xml3d'], function (XML3D) { console.log(XML3D) // that works });

console.log代码显示正确的信息,但是XML3D画布未正确打开(缩小到小区域并且没有渲染任何对象)。

而且,是的

 <script src="xml3D url"></script>

而是使用require.js正常工作(一切都呈现。) 所以下面的代码可以工作(由...组成) index.html 没有 main.js )。

<xml3d>
...some stuff..
</xml3>
<script src="url of XML3D"></script>

1 个答案:

答案 0 :(得分:1)

你是对的,这是对XML3D初始化方式的简单疏忽。我们正在为public static object InvokeGenericMethodWithRuntimeGenericArguments(Action methodDelegate, Type[] runtimeGenericArguments, params object[] parameters) { if (parameters == null) { parameters = new object[0]; } if (runtimeGenericArguments == null) { runtimeGenericArguments = new Type[0]; } var myMethod = methodDelegate.Target.GetType() .GetMethods() .Where(m => m.Name == methodDelegate.Method.Name) .Select(m => new { Method = m, Params = m.GetParameters(), Args = m.GetGenericArguments() }) .Where(x => x.Params.Length == parameters.Length && x.Args.Length == runtimeGenericArguments.Length ) .Select(x => x.Method) .First().MakeGenericMethod(runtimeGenericArguments); return myMethod.Invoke(methodDelegate.Target, parameters); } 注册一个监听器,而不先检查DOMContentLoaded,所以逻辑上,在require.js加载XML3D时,document.readyState事件已经被调度。

该修复程序将成为即将发布的4.9.4版本的一部分,并且位于hotfix-4.9.4 branch

平均时间没有简单的解决方法(除非您想通过require.js加载XML3D后手动触发DOMContentLoaded事件,这非常麻烦)但您可以构建修补程序分支或将修复程序拉入您的xml3d.js的副本,因为它只有几行。