您好我正在尝试使用threejs制作cms,并且我想将json属性添加到threejs的网格中。我可以使用以下命令检索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 );
}
答案 0 :(得分:1)
您可以使用Object.keys()
获取对象的属性。然后使用bracket notation将该属性分配给您的网格:
// 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发生了变化,它也会一直运行。
这是一个有效的Pen。
请注意,Object3D
已包含id
属性,因此您将覆盖该属性。首先检查一下你在JSON中的内容。
另一种选择是将对象附加到网格并在那里分配值。类似的东西:
mesh.info[v] = obj[v];
然后您可以像mesh.info.id
一样访问它,而不会丢失以前的值。