Как получить весь список объектов переменных и массивов без необходимости получать от объекта дочерний идентификатор gundb?
Я просто заметил, что дочерний объект объекта имеет идентификатор, но не то, что я хотел, когда я пытаюсь получить переменную объекта. Какой магазин я хотел в объекте объекта, но нашел только id?
Например, я использовал сцену для управления объектами, чтобы сохранить и загрузить для легкого доступа.
{x: 0, y: 0, z: 0, prarms: {height: 0, width: 0}}
результат сохранения - когда я проверяю данные, я обнаружил, что они разные.
{x: 0, y: 0, z: 0, prarms: #randomids}
Я использовал set и put, если объекты совпадают, используя uuid. Нужна небольшая помощь о том, как это работает. Требуется получить данные всего объекта, но не идентификаторы объекта gundb.
Удалось получить частично рабочий код для набора и заставить объект данных работать частично. Вот простая версия, как установить.
//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);
};
Не полностью протестированы. Но это сработало стороной, не пытаясь обнаружить какое-либо обновление, после того как нажал на объекты сцены.
Использован пример кода из фрагментов.
1 ответ
Если я правильно понимаю ваш вопрос... вы, вероятно, хотите использовать этот плагин:
https://github.com/gundb/synchronous
gun.get('player').sync({}, {}, function(player){
// player updated!
console.log("Full object, not just pointers:", player);
})
Существует также https://github.com/gundb/onward который дает вам diff и путь к документу.
Это помогает? Дайте мне знать, и я пересмотрю ответ по мере необходимости.