Google apps script 在GAS中存储控制指针数组
下面的代码工作得很好,它用占位符填充FlexTable,占位符表示日历列中的日期,与酒店行中的房间相对。一些脱离上下文的代码已被删除,因此此处显示的内容将不会执行。但客户端处理程序所做的是在选中任何单元格时隐藏每个房间的整个列,然后第二个客户端处理程序取消隐藏选中的单元格。这可以防止用户在同一天注册两个房间,并使体验更具交互性。到目前为止,一切顺利 当然,在重置日历时,我还有一些其他代码,它循环选择的每个单元格,并使用控件ID取消隐藏相关列中的所有单元格,以引用网格位置。但可能的是引用与构造clienthandler所用的实际控件相同的数组 那么简单地说,是否可以存储一个类引用数组?CacheService和PropertiesService都只存储字符串-我是否遗漏了什么Google apps script 在GAS中存储控制指针数组,google-apps-script,Google Apps Script,下面的代码工作得很好,它用占位符填充FlexTable,占位符表示日历列中的日期,与酒店行中的房间相对。一些脱离上下文的代码已被删除,因此此处显示的内容将不会执行。但客户端处理程序所做的是在选中任何单元格时隐藏每个房间的整个列,然后第二个客户端处理程序取消隐藏选中的单元格。这可以防止用户在同一天注册两个房间,并使体验更具交互性。到目前为止,一切顺利 当然,在重置日历时,我还有一些其他代码,它循环选择的每个单元格,并使用控件ID取消隐藏相关列中的所有单元格,以引用网格位置。但可能的是引用与构造cl
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);
};
};
将数组存储为字符串并将其检索为数组可以使用不同的方法实现,其中一种方法是使用JSON.Stringifyarray和JSON.parsestring方法 但在许多情况下,简单数组可以简单地使用join和split,使用逗号作为默认分隔符。或者,如果由于某种原因,数组元素中可能有逗号,请自己选择分隔符;我使用不常见的字符,比如∏ 或者|这在视觉上很容易阅读,但您可以在形式中使用您想要的连接'delimiter'和拆分'delimiter' 例如:
[a,b,c].join('|') is a string : "a|b|c"
"a|b|c".split('|') is an array : [a,b,c]
谢谢Serge,我还没有试过你的建议,但由于数组包含类或对它们的引用,我认为应用JSON会使它们无法使用?你是对的。。。我想我没有仔细阅读这个请求。。。我将删除这个答案。为什么不保存它们的ID呢?不用担心,我可以使用它们的ID,但因为我们可以在ClientHandler等中使用类本身的数组,所以我认为我们可以存储它们,然后以类似的方式引用整个控件组