我正在匿名函数中进行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);
答案 0 :(得分:0)
我添加了一个带有嵌套setTimeout的匿名函数,以便为构建提供所有时间。我有很多事件同时发生,所以现在这很有效。
var horizontalPositioner = function (horizontals) {
(function (hors) {
setTimeout(function () {
var hpa = ['?horPositions='];
for (var i = 0; i < hors.children.length; i += 1) {
hpa.push(hors.children[i].id + ':' + (hors.children[i].position ? hors.children[i].position : 1) + ',');
};
hpa[i] = hpa[i].replace(',', '');
dataBase.update(dbPart('horizontal' + hpa.join('')));
}, 1000);
}(horizontals));
};