匿名関数内から AJAX 呼び出しを行っています。成功のコールバックが発生すると、カスタム JS オブジェクト ID と、データ サーバーから受信したその他の重要な情報を設定できます。
a.target.id を返された data.id に設定した後、すべてが正常に見えます。
新しく更新されたカスタム JS オブジェクトで何らかの作業を行う関数を呼び出すステップで、サーバーからの応答データで更新しました。そのオブジェクトの親をメソッドに渡して、そのオブジェクトのすべての子に対して何らかの作業を行います。
ただし、スナップショット写真の最後の例でわかるように、 a.target.parent.children[0].id はコレクションにないか、設定されていない ID です。
匿名関数を使用している場合、AJAX 呼び出し中にそのオブジェクトへの参照が失われているに違いありません。
これがすべてのコードです。どうすれば参照を失うのですか? または、AJAX 呼び出しが返されたときに、その親の子への参照をどのように維持できますか?
これまでにこれが起こったことは一度もありません。匿名機能と関係があると思います。
var horizontalPositioner = function (horizontals) {
var hpa = ['?horPositions='];
for (var i = 0; i < horizontals.children.length; i += 1) {
hpa.push(horizontals.children[i].id + ':' + horizontals.children[i].position + ',');
};
hpa[i] = hpa[i].replace(',', '');
dataBase.update(dbPart('horizontal' + hpa.join('')));
};
this.subscribe.call(this, e.horizontaladded, function (a, fn) {
//
if (!a.extra.owner.id) {
return;
};
(function (a) {
dataBase.insert(
dbPart(
['horizontal?a=', a.extra.owner.instanceName, '&id=', a.extra.owner.id].join(''),
a.target
),
dbCB(
function (data, status) {
if (status === 'error') { return; };
a.target.id = data.id,
a.target.HTML().addClass('alum_' + data.id),
a.target.finish.id = data.finishID,
a.target.size.id = data.sizeID,
a.target.siteLine.id = data.sitelineID;
//
//reposition horizontals
// setTimeout(function () { horizontalPositioner(a.target.parent); }, 1000);
debugger
horizontalPositioner(a.target.parent);
if (fn) { processCallbacks(data, status, fn); };
//very last
events.publishDatabaseCallbacks(e.horizontaladded,
eArgs(a.bay, { data: data, instanceName: 'horizontal', ownerid: a.extra.owner.id, id: data.id }));
},
function (xhr, status, errorThrown) { console.log('ERROR adding horizontal'); })
);
}(a));
}, true);