2

我正在使用 jQuery 动态创建一个 div,然后将该 div 的 id 作为 renderer3D 的容器传递。当我做:

r.container = id

我在 JS 控制台中看到“找不到给定容器”的错误。我已经检查过了,div 在 DOM 中并且可见。奇怪的是,这工作正常,但我对加载 XTK 库的时间做了一个小的改动。

4

3 回答 3

2

提交 https://github.com/xtk/X/commit/77d6c1e6e3062465acc297f782f410cf5a470211 后应该一切正常!问题是 Google Closure Compiler 使用 $ 来优化代码,这打破了 jQuery 的使用。

请参阅此处的示例http://jsfiddle.net/YLVPr/

var element = $(document.body);
//container.show();
var id = 'xtkwidget_' + 1;//utils.uuid();
var xtkdiv = $('<div/>').attr('id',id);
xtkdiv.css('background-color','#FFF').width(400).height(300);
element.append(xtkdiv);
var obj_c54ce3e329b84364b5542aeb4c303ece = new X.renderer3D();
obj_c54ce3e329b84364b5542aeb4c303ece.container = document.getElementById(id); // NOTE here we have to pass the original div, not the id or the jQuery object
obj_c54ce3e329b84364b5542aeb4c303ece.init();

var obj_bd99e35ed147423faa2a2d77cbc540af = new X.mesh();
obj_bd99e35ed147423faa2a2d77cbc540af.magicmode = true;
obj_bd99e35ed147423faa2a2d77cbc540af.opacity = 0.700000;
obj_bd99e35ed147423faa2a2d77cbc540af.color = [1.000000,1.000000,1.000000];
obj_bd99e35ed147423faa2a2d77cbc540af.file = "http://x.babymri.org/?avf.vtk";
obj_c54ce3e329b84364b5542aeb4c303ece.add(obj_bd99e35ed147423faa2a2d77cbc540af);
obj_c54ce3e329b84364b5542aeb4c303ece.render();​
于 2012-11-02T01:18:58.420 回答
1

该代码是一个非常复杂的 Web 应用程序的一部分。实际的 JavaScript 代码由服务器动态生成,通过 JSON 发送到浏览器并传递给 eval。以下是代码的示例:

container.show();
var id = 'xtkwidget_' + utils.uuid();
var xtkdiv = $('<div/>').attr('id',id);
xtkdiv.css('background-color','#FFF').width(400).height(300);
element.append(xtkdiv);
var obj_c54ce3e329b84364b5542aeb4c303ece = new X.renderer3D();
obj_c54ce3e329b84364b5542aeb4c303ece.container = id;
obj_c54ce3e329b84364b5542aeb4c303ece.init();

var obj_bd99e35ed147423faa2a2d77cbc540af = new X.mesh();
obj_bd99e35ed147423faa2a2d77cbc540af.magicmode = true;
obj_bd99e35ed147423faa2a2d77cbc540af.opacity = 0.700000;
obj_bd99e35ed147423faa2a2d77cbc540af.color = [1.000000,1.000000,1.000000];
obj_bd99e35ed147423faa2a2d77cbc540af.file = "files/smallsurface.vtk";
obj_c54ce3e329b84364b5542aeb4c303ece.add(obj_bd99e35ed147423faa2a2d77cbc540af);
obj_c54ce3e329b84364b5542aeb4c303ece.render();
于 2012-08-09T22:17:36.907 回答
0

你能围绕这个给出更多的代码行吗?

第一个可能的问题:你是怎么写你的身份证的?If 必须是 'xtkcontainer' 而不是 '#xtkcontainer' 与 jQuery 不同。

另一个可能的问题:您的代码行是在窗口加载结束之前执行的。您的代码是在正文之后编写的,在“window.onload”函数中编写还是在用户加载窗口或超时事件后执行?

Ricola3D

于 2012-08-06T07:20:43.610 回答