2014-09-14 3 views
0

아래 코드는 FlexTable을 달력 (열)의 일을 나타내는 자리 표시 자, 호텔의 객실 (행)을 채우는 FlexTable로 채 웁니다. 컨텍스트를 벗어난 일부 코드가 제거되었으므로 여기에 표시된 내용은 실행되지 않습니다. 그러나 클라이언트 핸들러는 셀을 선택하면 모든 칸 (전체 열)을 숨기고 두 번째 클라이언트 핸들러는 선택한 셀을 숨김 해제합니다. 이렇게하면 사용자가 같은 날에 2 개의 객실을 등록 할 수 없으며 경험을보다 양방향으로 유지할 수 있습니다. 여태까지는 그런대로 잘됐다.GAS에 컨트롤 포인터 배열 저장

물론 캘린더 재설정과 관련하여 나는 모든 셀을 반복하여 루프하는 다른 코드가 있으며 제어 ID를 사용하여 관련 열의 모든 셀을 숨김으로써 그리드 위치를 참조합니다. 그러나 가능한 것은 클라이언트 핸들러를 생성하는 데 사용 된 컨트롤과 동일한 실제 컨트롤 배열을 참조하는 것입니다.

간단히 클래스 참조 배열을 저장할 수 있습니까? CacheService와 PropertiesService는 모두 문자열 만 저장합니다. 내가 놓친 것이 있습니까?

var vCaledarSelectors = {}; 

for(var r=0; r<iRows; r++){ 
    for(var c=1; c<iCols+2; c++){ 

    var sControl = 'calendarSlot_' + r + '_' + c;    
    var oSlotLabel = app.createLabel() 
    .setId(sControl);  

    if(r==0){ 
     vCaledarSelectors[c] = []; 
    }; 

    vCaledarSelectors[c].push(oSlotLabel); // STORE THE CONTROL POINTER IN ARRAY     
    oCalendar.setWidget(r, c, oSlotLabel);  
    }; 
}; 

for(var vSlotCol in vCaledarSelectors){ 

    // HIDE ALL CONTROLS IN THE COLUMN 
    var chandlerColVisOff = app.createClientHandler().forTargets(vCaledarSelectors[vSlotCol]).setVisible(false);  
    for(var vSlot in vCaledarSelectors[vSlotCol]){ 
    // UNHIDE THE EVENT SOURCE CONTROL 
    var chandlerSlotVisOn = app.createClientHandler().forEventSource().setVisible(true); 

    vCaledarSelectors[vSlotCol][vSlot].addClickHandler(chandlerColVisOff).addClickHandler(chandlerSlotVisOn); 
    }; 
}; 

답변

0

문자열로 배열을 저장 (및 배열로 입수) 상이한 접근법을 이용하여 달성 될 수있다, 그들 중 하나를 문서화 hereJSON.Stringify(array)JSON.parse(string) 및 방법을 사용하는 것이다.

그러나 대부분의 경우 (단순 배열) 쉼표를 기본 구분 기호로 사용하는 join()split()을 사용할 수 있습니다. 또는 어떤 이유인지, 배열 요소에 쉼표가있을 수 있으면 구분 기호를 직접 선택하십시오. 또는 |과 같이 흔히 읽기 쉬운 문자를 사용하지만 join('delimiter')split('delimiter')과 같은 형식으로 원하는 문자를 사용할 수 있습니다.

예 :

[a,b,c].join('|') is a string : "a|b|c" 

"a|b|c".split('|') is an array : [a,b,c] 
+0

덕분에 서지, 나는 당신이 제안 무엇을 시도하지 않은,하지만 배열이 (그들에게 또는 참조) 클래스를 포함하고 있기 때문에, 내가 JSON 그들에게 사용할 수 없게 될 것입니다 적용 된 것으로 간주? – Tim

+0

당신 말이 맞아요 ... 요청을 자세히 읽지 않았던 것 같아요 ... 나는이 대답을 제거 할 것입니다. 대신 ID를 저장하지 않으시겠습니까? –

+0

걱정하지 않아도됩니다. - Id를 사용할 수는 있지만 클라이언트 핸들러 등에서 클래스 배열을 사용할 수 있으므로 클래스를 저장 한 다음 비슷하게 컨트롤 그룹 전체를 참조 할 수있을 것이라고 생각했습니다. – Tim