나는 내 코드에서 클로저 클로저 문제를 생각해 냈다. 나는 this article 을 읽었으며 큰 도움이되었습니다. 최근에 기사에서 언급 한 "Closure With Looping"절과 비슷한 문제가 생겼습니다. 나는 그들의 해결책을 시도했지만 여전히 내 문제를 해결하지 못했습니다. 나는 해결책을 찾기 위해 어디에서나 찾고 있었지만 나는 항상 기사에서 하나를 찾는다.폐쇄 루핑 : 작동하지 않습니까? (jqueryui 사용)
일부리스를 드래그 할 수 있도록 jqueryui를 사용하고 있습니다. 컨테이너에 놓을 때 해당 리의 변수 (노드)를 사용해야합니다. 문제는 노드 (및 인덱스)가 항상 마지막 것입니다 (따라서 클로저 문제). 여기
내 코드입니다 (나는 그것을 조금 단순화했습니다 문제 식별 간단 있도록) :function makeDraggable(node, i) {
$("#rightTab li#" + node.id).draggable({
containment: 'div#container',
stack: 'div#container',
scroll: false,
revert: 'invalid',
helper: function() {
return $(this).children().clone();
},
start: function(event, ui) {
$(this).children().css('opacity', 0);
},
stop: function(event, ui) {
$(this).children().css('opacity', 1);
}
});
$("#vis").droppable({
drop: test(node, i)
});
}
function test(noder, index) {
return function(event, ui) {
alert(index);
//stuff with node.
}
}
function appendInfo(nodes) {
for(var i = 0; i < nodes.length; i++) {
$("#rightTab #content ul").append("<li id=" + nodes[i].id + "><div></div></li>");
if(visualization.hasImageLabel) {
interfaceHandler.handleImageLabel(nodes[i]);
}
if(visualization.hasTextLabel) {
interfaceHandler.handleTextLabel(nodes[i]);
}
makeDraggable(nodes[i], i);
}
}
내가 (기능 시험) 인덱스를 경고 항상 9 인쇄를 (최대 배열 길이), 노드도 항상 마지막 것입니다. 당신이 전화하는거야
function makeDraggable(node, i) {
var innerIndex = i;
$("#rightTab li#" + node.id).draggable({
containment: 'div#container',
stack: 'div#container',
scroll: false,
revert: 'invalid',
helper: function() {
return $(this).children().clone();
},
start: function(event, ui) {
$(this).children().css('opacity', 0);
},
stop: function(event, ui) {
$(this).children().css('opacity', 1);
}
});
$("#vis").droppable({
drop: test(node, innerIndex)
});
}
오 잘. 지금 바보 같아. 웬일인지 나는 모든 draggable에 droppable을 추가해야한다고 생각했다. 그러나 그것은 심지어 말이되지 않는다. 도와 주셔서 정말로 고맙습니다. – Solidus
우리는 모두 여기 배우려고합니다. –