object のオブジェクトの子に id があることに気付きましたが、オブジェクト変数を取得しようとしたときにそれが必要だったわけではありません。object の object のどのストアが欲しかったのですが、id しか見つかりませんでしたか?
たとえば、シーン管理を使用してオブジェクトを保存およびロードし、簡単にアクセスできるようにしました。
{ x:0, y:0, z:0, prams:{高さ:0,幅:0} }
保存の結果は、データを確認したときに異なることがわかりました。
{ x:0, y:0, z:0, prarms:#randomids }
uuid を使用してオブジェクトが一致する場合は、set と put を使用しました。それがどのように機能するかについて少し助けが必要です。オブジェクト データ全体を取得したいが、gundb オブジェクト ID は取得したくない。
set の部分的に機能するコードを取得し、データ オブジェクトを部分的に機能させるように管理します。こちらは簡易版の設定方法。
//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);
};
完全にテストしていません。しかし、シーンオブジェクトにプッシュすると、更新を検出しようとはしませんでした。
スニペットのサンプルコードを使用。