下面的代码运行正常,它使用占位符填充FlexTable,占位符表示日历(列)上的天数,对应酒店中的房间(行)。删除了一些脱离上下文的代码,因此此处显示的代码将不会执行。但客户端处理程序所做的是在选择时隐藏任何单元格的每个房间(整个列),然后第二个客户端处理程序取消隐藏所选单元格。这可以防止用户在同一天注册2个房间,并使体验更具互动性。到目前为止,非常好。
当然,在重置日历时,我还有一些其他代码循环选中每个单元格,并使用控件ID取消隐藏相关列中的所有单元格以引用网格位置。但应该可能的是,引用与用于构造clienthandler的实际控件相同的数组。
那么简单,是否可以存储类引用数组? 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 :(得分:0)
将数组存储为字符串(并将其作为数组检索)可以使用不同的方法实现,其中之一是使用JSON.Stringify(array)
和JSON.parse(string)
方法记录here。
但在许多情况下(简单数组),您只需使用逗号作为默认分隔符的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]