我正在测试一个JS库来三角化一个点数组(它返回一个三角形数组),并且似乎工作得很好,但是当我添加MooTools时 (这个lib将被嵌入到一个使用MooTools的大型项目,所以我需要它)它停止工作。 :(
我的意思是我只需要在标题中添加MooTools(既不添加domready事件)也会出错...
Uncaught TypeError: Object function (){
return lower;
} has no method 'InCircumcircle'
我尝试添加JQuery而不是MooTools,它甚至在domready块中也能完美运行......所以我对mootools的问题一无所知......(也许MooTools改变了JS Object模型中的某些东西不兼容有这个库?)
我不知道如何解决它... 或者也许我是菜鸟,这是我看不到的小细节...... :)
我在JSFiddle中准备了一个小型演示,你可以自己查看它:
的 http://jsfiddle.net/6KcW9/
图书馆 delauny.js 在管理资源部分中进行了链接。
按原样运行这个简单的代码,你会看到它向控制台输出一些元素...尝试在框架部分添加MooTools并再次运行它。
任何帮助/线索/任何将是伟大的apretiated ...
答案 0 :(得分:1)
http://www.travellermap.com/tmp/delaunay.js
MooTools是一个典型的框架。这意味着,它为Native原型添加了可以迭代的方法。
var i;
for( i in vertices )
{
// NOTE: This is O(n^2) - can be optimized by sorting vertices
// along the x-axis and only considering triangles that have
// potentially overlapping circumcircles
var vertex = vertices[i];
AddVertex( vertex, triangles );
}
这样的代码,其中顶点是一个数组 - 将完全破坏。 for (var in object)
构造是一种迭代Object属性的方法。相反,正在传递一个数组(它与js中的几乎任何东西一样 - 是一个对象,但具有类似数组的属性)。
var g_vertices = [];
for( var i = 0; i < 50; i++ ) {
g_vertices.push( new Vertex( Math.random() * 350 + 25, Math.random() * 250 + 25 ) );
}
// var triangles = Triangulate( g_vertices );
// console.log(triangles);
console.log(g_vertices);
for (var i in g_vertices) {
console.log(i);
}
当您将mootools添加到页面时,结果是:
0, 1, 2 .... 49, $family, $constructor, each, clone, clean, invoke ... etc.
hasOwnProperty
检查 - &gt; if (g_vertices.hasOwnProperty(i)) ...
- 或者使用正确的for
数组迭代器或while
甚至Array.forEach
,无论您喜欢什么。
找到这样的替代方案:https://github.com/sokeroner/Delaunay-Triangulation - 它似乎写得更好,更模块化。
答案 1 :(得分:0)
因为您要将所有内容添加到全局命名空间,所以您可能会遇到麻烦。
你真的应该包裹你的code in a module,这样你就不会污染全局命名空间。