我只是注意到 object 的 object child 有 id 但不是我在尝试获取 object 变量时想要的。我想在对象的对象中存储什么,但我只找到了 id?
例如,我使用场景管理对象来保存和加载以便于访问。
{ x:0, y:0, z:0, 参数:{height:0,width:0} }
保存的结果是当我检查数据时发现它不同。
{ x:0, y:0, z:0, prarms:#randomids }
如果对象使用 uuid 匹配,我使用 set 和 put。需要一些帮助来了解它是如何工作的。想要获取整个对象数据,而不是 gundb 对象 ID。
设法获得部分工作代码以进行设置并让数据对象部分工作。这里简单的版本如何设置。
//console.log("saving object data????");
this.check_gunsceneobj(obj['uuid'],(bfind,id)=>{
//console.log("....CALLS");
var gscene = this.gun.get('scene');
//check child keys var is object to put var
function gunObjectAssign(_gun, _obj){
for(var i in _obj){
if(typeof _obj[i] == 'object'){
console.log(i);
//pathing for object child of object
_gun.path(i).put(_obj[i]);
gunObjectAssign(_gun.path(i),_obj[i]);
}
}
}
if(bfind){
console.log("set object scene[update]");
if(id !=null){
console.log(id);
gscene.path(id).put(obj);
gunObjectAssign(gscene.path(id),obj);
}
}else{
console.log("save object scene[insert]");
//console.log(obj);
gscene.set(obj);
}
console.log("object save?");
});
这里是获取对象。
function gunObjDataAssign(self,data){
for(var i in data){
if(typeof data[i] === 'object'){
if(data[i] !=null){
var id = data[i]['#'];
data[i] = {}; //clear id hash
self.get(id).val((objdata)=>{
delete objdata._;
data[i] = objdata;
gunObjDataAssign(self,objdata);
});
}
}
}
}
Gun.chain.valueobj = function (cb, opt) {
return this.val(function (val, field) {
if(val !=null){
delete val._;
}
gunObjDataAssign(this,val);
cb.call(this, val, field);
}, opt);
};
Gun.chain.liveobj = function (cb, opt) {
return this.on(function (val, field) {
delete val._;
gunObjDataAssign(this,val);
cb.call(this, val, field);
}, opt);
};
Gun.chain.eachobj = function () {
var each = this.map();
return this.valueobj.apply(each, arguments);
};
还没有完全测试。但是一旦推送到场景对象,它的工作方不会尝试检测任何更新。
使用片段中的示例代码。