2013-10-31 3 views
0

버튼을 눌러 그리드의 요소를 새로 고치기 위해 서버 핸들러를 호출하는 매우 복잡한 스크립트를 작성했습니다.함수에 패널 위젯 전달하기

코드 재사용 및 일관된 동작을 위해 그리드의 초기 그리기 중에 해당 서버 처리기를 직접 호출하고 싶습니다. 서버 핸들러는 버튼을 누르면 호출되는

, 모든 예상 위젯을 사용할 수 있습니다 내가 직접 함수를 호출하고 그것을 패널 변수를 전달하는 경우 e.parameter.widget 등

으로 조회 할 수 있습니다 e의 값은 'AbsolutePanel'입니다.

전체 패널과 함수에 포함 된 모든 위젯을 전달하는 addCallbackElement 방법을 에뮬레이트 할 수있는 방법이 있습니까?

또는 스크립트 시작시 자동으로 서버 처리기를 시작하는 방법은 무엇입니까?

아래의 구문 오류를 용서하십시오. 관련 코드에 500 줄의 코드를 정리했습니다.

감사

토니

function doGet() { 
    var app = UiApp.createApplication(); 

    var mainPanel = app.createAbsolutePanel(); 

    var monthsAbbr = ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.']; 

    var Dates = Array(); 
    var period = 5; 
    var dateHidden = Array(); 
    var dayOfMonth = new Date(((period * 28) + 15887) * 86400000); 
    var dateString = ''; 
    var dayOfWeek = 0; 
    for (var i=0; i<84; i++) { 
    dateString = dayOfMonth.getDate() + ' ' + monthsAbbr[dayOfMonth.getMonth()] + ' ' + (dayOfMonth.getFullYear() - 2000); 
    Dates [i] = dateString; 
    dateHidden[i] = app.createHidden('dates'+i, dateString).setId('dates'+i); 
    mainPanel.add(dateHidden[i]); 
    dayOfMonth = new Date(dayOfMonth.getTime() + 86400000); 
} 

var buttonReset = app.createButton('Reset').setId('buttonReset'); 

var handlerChange = app.createServerHandler('myHandlerChange'); 
handlerChange.addCallbackElement(mainPanel); 

mainPanel.add(buttonReset.addChangeHandler(handlerChange)); 

app.add(mainPanel); 

myHandlerChange(mainPanel); 

return app; 
} 


function myHandlerChange(e) { 
var app = UiApp.getActiveApplication(); 
Logger.log('Here are the widgets passed into the function: ' + Utilities.jsonStringify(e)); 

return app; 
} 
+0

코멘트 ...'Utilities.jsonStringify (E)은 '불행하게도 함수가, – Tony

답변

0

및없이 모든 사용자 작업은 설명서를 참조하십시오. here : "값이 변경되면 CheckBox를 선택할지, 선택적으로 이벤트를 발생 시킬지 여부를 설정합니다 이 전화의 결과로. "

그러한 구현의 포럼에서 몇 가지 예 있습니다 자체에 here 또는 here

+0

그건 내가 찾던 똑똑한 해결책이다. 감사! – Tony

+0

도와 드리겠습니다. (나는이 트릭을 매우 좋아한다 ;-). 대답을 받아들이는 것을 고려해 보라. 고마워 –

0

같은 몇 가지 일을 할 수 있습니다 ...

function doGet { 
    ... 
    myHandlerChange(); // DON'T PASS THE UI WIDGET ITSELF 
    return app; 
} 


function myHandlerChange(e) { 
    var app = UiApp.getActiveApplication(); 

    if (e) { // DO SOMETHING WHEN 'e' EXISTS 
    Utilities.jsonStringify(e)); 
    } 
    else { // DO SOMETHING AT THE START, WHEN 'e' DOESN'T EXIST 
    app.getElementById('dates0').setText('something'); 
    } 

    return app; 
} 
당신이 원하는 때 이벤트를 트리거하기 위해 체크 박스 ( setVisible(false))를 사용할 수
+0

감사 브라이언 :-)되지 않습니다 e.parameter.widget을 사용하여 많은 위젯의 값을 참조해야하므로 필자는이 솔루션이 도움이 될지 확신 할 수 없다. 숨겨진 체크 박스로 이벤트를 트리거하는 Serge의 제안은 트릭을 멋지게 처리합니다. – Tony