一段时间以来,我一直在尝试将数据添加到我的数组中,但它不起作用。我有以下代码:
function OBJMesh(file)
{
this.modelVertex = [];
this.modelColor = [];
var that = this;
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function ()
{
if(rawFile.readyState == 4)
{
if(rawFile.status === 200 || rawFile.status === 0)
{
var allText = rawFile.responseText;
var lines = allText.split("\n");
for(var i = 0; i < lines.length; i ++)
{
var lineData = lines[i];
var lineString = lineData.split(" ");
if(lineString[0] === "v")
{
var x = parseFloat(lineString[1]);
var y = parseFloat(lineString[2]);
var z = parseFloat(lineString[3]);
/*
this.modelVertex.push(x);
this.modelVertex.push(y);
this.modelVertex.push(z);
this.modelColor.push(0.0);
this.modelColor.push(0.0);
this.modelColor.push(0.0);
this.modelColor.push(1.0);
*/
that.modelVertex.push(10.0);
//document.getElementById("textSection").innerHTML = "testing";
}
}
}
}
}
rawFile.send();
}
OBJMesh.prototype.getModelVertex = function ()
{
return this.modelVertex;
};
OBJMesh.prototype.getModelColor = function ()
{
return this.modelColor;
};
如果我注释掉 this.modelVertex.push(10.0);
它会通过错误并打印出“testing”。但是如果我取消注释它,它就会卡在那里并且不会打印出任何东西。为什么要这样做?我该如何解决它,以便它实际上将给定数据推送到 this.modelVertex
数组?
非常感谢
编辑:在 dystroy 告诉我该做什么之后我编辑了我的代码,当我尝试打印 OBJMesh 构造函数(如上所示)中的值时它确实有效,但是当我尝试通过在我的main 函数(如下所示)它不打印任何内容。
var cubeModel;
function main()
{
cubeModel = new OBJMesh("file:///Users/Danny/Desktop/3DHTMLGame%202/cube.obj");
document.getElementById("textSection").innerHTML = cubeModel.getModelVertex();
}
最佳答案
this
不是回调中 OBJMesh
的新实例,而是 XMLHttpRequest
。
首先在定义回调之前引用所需的对象:
var that = this;
rawFile.onreadystatechange = function ()
然后使用它:
that.modelVertex.push(10.0);
在您的编辑中回答问题:
您的构造函数包含一个异步请求。这意味着您的阵列不是立即可用,而是稍后可用。
一个解决方案是将回调传递给构造函数:
function OBJMesh(file, doAfterInit) {
this.modelVertex = [];
this.modelColor = [];
var that = this;
var rawFile = new XMLHttpRequest();
rawFile.open("GET", file, true);
rawFile.onreadystatechange = function () {
if(rawFile.readyState == 4)
{
if(rawFile.status === 200 || rawFile.status === 0)
{
var allText = rawFile.responseText;
var lines = allText.split("\n");
for(var i = 0; i < lines.length; i ++)
{
var lineData = lines[i];
var lineString = lineData.split(" ");
if(lineString[0] === "v"){
that.modelVertex.push(10.0);
if (doAfterInit) doAfterInit();
}
}
}
}
}
rawFile.send();
}
...
cubeModel = new OBJMesh("file:///Users/Danny/Desktop/3DHTMLGame%202/cube.obj", function() {
document.getElementById("textSection").innerHTML = cubeModel.getModelVertex();
});
但是在这里上课看起来不是个好主意。
关于javascript - 在javascript中将数据添加到本地数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484121/