2016-12-25 12 views
1

私は、オブジェクトのオブジェクトの子がidを持っているが、オブジェクト変数を取得しようとしたときにそれを望んでいないことに気付きました。オブジェクトのオブジェクトに何を保存したかったのですが、IDだけしか見つけられませんでしたか?どのように全体のオブジェクトの変数と配列を取得する必要はなく、オブジェクトの子供のIDから取得するgundb?

たとえば、シーンを管理してオブジェクトを保存して読み込み、簡単にアクセスできるようにしました。

{ X:0、 Y:0、 Z:0、 prarms:{高さ:0、幅:0} }私はそれを発見したデータをチェックする際に保存から

結果は異なる。

{X:0、Y :0、 Z:0、 prarms:#randomids }

Iが設定され、オブジェクトはUUIDを使用して一致した場合に置く使用します。それがどのように機能するかについて少し助けが必要です。オブジェクトデータ全体を取得しようとしましたが、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); 
       }; 

十分にテストされていません。しかし、それは一度シーンオブジェクトにプッシュしても何の更新も検出しようとはしませんでした。

スニペットから使用されたサンプルコード。

答えて

0

私が正しくあなたの質問を理解していれば...あなたはおそらく、このプラグインを使用したい:

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はあなたの文書の差分とパスを与えるもあります。

これは役に立ちますか?私に知らせて、私は必要に応じて答えを修正します。

関連する問題