2017-04-23 16 views
1

私はJSの方が新しく、indexedDBよりも新しいです。 私の問題は、コールバック関数内からオブジェクトを参照する必要があることです。 "req.onsuccess"は同期とは呼ばれないため、 "this"はGroupobjectを参照しません。 "this.units"と他の変数が定義されていない理由 非常に厄介な回避策はグローバル変数ですが、私はそれをするつもりはありません。 別の方法がありますか? コールバックに引数を渡すことがありますか?indexedDBコールバックへの引数の受け渡し

function Group(owner, pos) 
{ 
    this.name = ""; 
    this.units = []; 
    //... 
} 
Group.prototype.addUnit = function(unit) 
{ 
    let req = db.transaction(["units"]).objectStore("units").get(unit); 
    req.onsuccess = function(event) 
    { 
     let dbUnit = event.target.result; 
     if (dbUnit) 
     { 
      this.units.push(dbUnit);//TypeError: this.units is undefined 
      if (this.name == "") 
      { 
       this.name = dbUnit.name; 
      } 
     } 
    }; 
}; 
myGroup = new Group(new User(), [0,0]); 
myGroup.addUnit("unitname"); 

ありがとうございます! "バインド(これ)" を使用して

EDIT

は、問題を解決しました。

Group.prototype.addUnit = function(unit) 
{ 
    let req = db.transaction(["units"]).objectStore("units").get(unit); 
    req.onsuccess = function(event) 
    { 
     let dbUnit = event.target.result; 
     if (dbUnit) 
     { 
      this.units.push(dbUnit);//TypeError: this.units is undefined 
      if (this.name == "") 
      { 
       this.name = dbUnit.name; 
      } 
     } 
    }; 
}.bind(this); 
+1

あなたのonSucessはどこですか?試してみてくださいバインド、呼び出し、JSで適用http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals/ –

+0

それは私の問題を解決しました。ありがとうございました!これを答えとして受け入れる方法はありますか? – Coding

答えて

関連する問題