你好,我正在尝试用threejs来创建cms,并且我想将json属性添加到一个由三个of组成的网格中。我可以通过以下方式检索json属性:
console.log(Articles.results[i].id);但我想要,例如,有mesh.id等。
我的json输出是:
{id: 6, title: "ytc zjzx", summary: "zxv xzcv xcvzx", content: "zxvxcbvcx bcvbdf", publicationDate: 1506632400}
length
:
2
__proto__
:
Array(0)
totalRows
:
2
__proto__
:
Object到目前为止我的代码是:
function addGeometry() {
var geometry = new THREE.BoxBufferGeometry(25, 25, 25);
var material = new THREE.MeshBasicMaterial({color:0x00ff44});
for(var i = 0; i < Articles.results.length; i += 1){
console.log(Articles);
mesh = new THREE.Mesh( geometry, material );
mesh.position.y =Math.random() * ((HEIGHT-10) - (HEIGHT+10));
mesh.position.x =Math.random() * ((HEIGHT-10) - (HEIGHT+10));
mesh.updateMatrix();
mesh.matrixAutoUpdate = false;
scene.add( mesh );
}发布于 2017-10-03 08:27:56
您可以使用Object.keys()获取对象的属性。然后使用括号表示法将该属性分配给网格:
// Assuming this is your object
var obj = Articles.results[i];
var keyNames = Object.keys(obj);
keyNames.forEach(v => {
// v is the name of the property (e.g. "id", "title")
mesh[v] = obj[v]
});然后,您将它们分配到您的网格中,您应该能够在以后访问它们。使用这种方法的好处是它非常灵活。即使您的JSON发生了更改,它也会同样工作。
这是一个工作的钢笔。
请注意,Object3D已经包含一个id属性,因此您将覆盖该属性。首先检查一下您在JSON中放了什么。
另一种选择是将一个对象附加到网格上,并在那里赋值。类似于:
mesh.info[v] = obj[v];然后,您可以像mesh.info.id一样访问它,而不会丢失以前的值。
https://stackoverflow.com/questions/46534051
复制相似问题