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>
答案 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的副本,因为它只有几行。