2011-09-22 6 views
2

jQuery 및 jQuery UI를 사용하여 Javascript에서 Openlayers 도구 모음을 개발 중입니다.Javascript에서 모달 차단 대화 상자

구현하고 싶은 기능 중 하나는지도에 포인트 추가입니다.

openLayers에서 'sketchcomplete'라는 이벤트를 수신 대기해야합니다.

layer.events.on({ 
    'sketchcomplete': onPointAdded 
}); 

문제는 onPointAdded 콜백입니다. 이 콜백은 true 또는 false를 반환해야합니다. True는 점을 맵에 추가해야한다는 것을 의미하고 false는이 점을 맵에 추가하는 것을 취소 함을 의미합니다.

지금 콜백은 다음과 같습니다

onPointAdded = function(feature) { 
    var f = feature.feature; 
    var result = false; 
    $('#dialog-point-add').dialog({ 
    modal : true, 
    buttons : { 
     'Add point' : function() { 
     result = true; 
     $(this).dialog("close"); 
     }, 
     'Cancel' : function() { 
     result = false; 
     $(this).dialog("close"); 
     } 
    } 
    }); 
    return result; 
}; 

문제는이 대화 상자가 실행 코드를 차단하지 않습니다. 나는 너에게이 상황을 다루는 방법을 묻고있다. 나는 포인트 추가를위한 확인과 함께 사용자에게 대화를 보여주고 싶다.

답변

1

질문을 올바르게 이해하면 jquery UI 대화 상자에서이를 수행 할 수 없습니다. 그래도 바닐라 js 확인 상자가 작동합니다.

0

JavaScript는 단일 스레드이며 다른 어떤 것도 실행할 수 없으므로 함수를 차단할 수 없습니다. 함수를 true로 반환하면 호출 할 논리를 'Add point'콜백에 추가하면 어떻습니까?

편집 : "정상적인"자바 스크립트 확인 대화 상자를 차단하는 것입니다 :

onPointAdded = function(feature) { 
    return confirm("Sure?"); 
}; 
+0

당신은 논리를 추가 무슨 뜻 이죠? 이 콜백을 호출하는 코드를 변경한다는 의미입니까? 예라면 OpenLayers 코드에서 digg를 가져 와서 변경해야하지만 라이브러리를 건드리지 않는 것이 좋습니다. "논리 추가"라고 말하면서 마음에 무엇이 있는지 설명 할 수 있습니까? 고맙습니다. – Marcin

+0

나는 열린 레이어를 알지 못하고 함수가 true를 반환 할 때 코드 일부를 호출 할 것이라고 생각했습니다. 그래서 제 제안은 코드 (또는 호출)를 jQuery UI 콜백으로 옮기는 것입니다. 잘못했다, 미안해. –

+0

이 과정은 해결책이 될 수 있습니다.하지만 추가 된 점과 사용자가 저장/확인을 누른 다음이 양식의 좌표와 이름이 포함 된 Ajax 게시물을 보내면 입력 대화 상자 양식에 표시해야합니다. 사용자가 "취소"를 클릭하면 해당 지점을 삭제해야합니다. 난 다른 openlayers 콜백과 함께이 솔루션을 발견. 고맙습니다 ... – Marcin