익명 함수 내에서 AJAX 호출을하고 있습니다. 성공 콜백이 발생하면 데이터 서버에서 도착한 사용자 정의 JS 객체 ID 및 기타 중요한 정보를 설정할 수 있습니다.익명 함수로 인해 AJAX 성공 후 ID가 설정되지 않습니다.
반환 된 data.id에 a.target.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);
'a.target'을보고 있지 않습니까? – user2246674