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);
あなたのonSucessはどこですか?試してみてくださいバインド、呼び出し、JSで適用http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals/ –
それは私の問題を解決しました。ありがとうございました!これを答えとして受け入れる方法はありますか? – Coding