2012-06-26 2 views
6

저는 편집기가 일부 값 (이 경우 과거 날짜 필드)을 사용하여 구성 요소를 저장하려고 할 때마다 나타나는 모달 팝업을 가지고 있습니다.앵 귈라 - 팝업에서 필드 값 업데이트 중?

이 팝업에서는 편집기에 몇 가지 옵션 (기본적으로 "공유 항목 열기"대화 상자와 비슷 함)과 확인/취소 버튼 콤보를 표시합니다. 취소시 "취소"이벤트가 발생하고 편집자가 편집 화면으로 돌아갑니다. 여기서는 모두 좋습니다. "OK"에서 필드의 값을 편집자가 선택한 것과 일치하도록 변경 한 다음 저장합니다.

FieldBuilder와 함께 접근 방식을 사용하려고 시도했지만 예제 Boris는 this other topic에 언급되어 있지만 팝업 대화 상자의 필드로 이동할 수 없습니다.

모달 팝업에서 항목의 xml을 수정하는 방법에 대한 제안 (페이지 일 수도 있음)?

편집 : 코드 getControlForFieldName에 사용

function getControlForFieldName(name) { 
    var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 
    var fieldsContainer = fieldBuilder.properties.input; 
    var fieldsNode = fieldsContainer.getElement(); 
    var fieldContainer = $dom.getFirstElementChild(fieldsNode); 
    while (fieldContainer) { 
     var labelNode = $dom.getFirstElementChild(fieldContainer); 
     var fieldNode = $dom.getNextElementSibling(labelNode); 
     var control = fieldNode.control; 
     if (control.getFieldName() == name) { 
      return control; 
     } 
     fieldContainer = $dom.getNextElementSibling(fieldContainer); 
    } 
} 

편집 # 2 프랭크의 조언, 그리고 제이미 & 프랭크 오프라인의 도움 후, 다음과 같이 작동있어

:

  1. 팝업이 명령 확장에서 호출됩니다 (내 경우에는 & 닫기)
  2. command.js 내가 이벤트 처리기에 선택한 항목을 (이 키워드 ID의) 전달하고 (== 확인을 누를) 내 팝업에서
$evt.addEventHandler(p.dialogPopup, "submit", 
    this.getDelegate(this._onPopupSubmit)); 

을 "제출"에 호출되는 이벤트 핸들러를 지정합니다 :

this.fireEvent("submit", { id: select.options[select.selectedIndex].value }); 

지금 다시 이벤트 처리기 _onPopupSubmit(e) 난 그냥, e.data.id 읽기이 키워드를로드 ID & 제목과 같은 속성을 얻고, item.setMetadata를 사용하여 항목의 메타 데이터를 업데이트에서 ("새 업데이트 된 값을 가진 메타 데이터 ").

간단한 :

+1

팝업에있는 코드를 공유 할 수 있습니까? 대체로 어딘가에 부모가없는 것 같습니다. –

답변

4

코드는 팝업에서 실행, 그래서 당신은 전역 변수에 대한 모든 참조는 팝업 창에서 이동합니다.

그래서 당신은 fieldBuilder을 얻을 때 :

var fieldBuilder = $display.getView().properties.controls.fieldBuilder; 

$ 표시가 전역 변수에 대한 참조입니다. 따라서 실제로는 FieldBuilder가 팝업 창 (FieldBuilder가없는)에서 찾습니다.

가 구성 요소 윈도우의 FieldBuilder를 얻으려면, 당신은 개막전에서 그것을 얻을 수 있습니다

var fieldBuilder = opener.$display.getView().properties.controls.fieldBuilder; 

당신도 콜백 함수 또는 (사용자 정의) 이벤트와 업데이트 된 값을 전달 실제로 고려하는 것이 좋습니다 그러나, 그게 당신의 팝업을 덜 의존에 opener. 트릭.

+0

감사합니다. 프랭크, 당신의 대답은 제가 필요한 것의 절반이었습니다. 짧은 토론 후에 - 당신의 통찰력을 바탕으로 - 나는 결과를 "제출"이벤트 핸들러로 되돌려 보내고 곧 올바른 답을 게시하고 랩하려고합니다 지금 코드를 올려라. –