使用Google Apps脚本和HtmlService将对象传递到模板

时间:2012-12-14 17:48:38

标签: javascript object google-apps-script

因此,我想在Google电子表格中列出植物列表,我想用HTML呈现。我有一个脚本,它将信息收集在一个对象或一个数组中,数组的每个元素都是一个对象。每个工厂都有一个3位数的id,用作对象和数组中的键,如下所示: object [143] .create_date = 12/15/2012 array [143] .create_date = 12/15/2012

正在正确创建对象和数组。

问题:

var pRet = HtmlService.createTemplateFromFile('Plant Listing');

我无法使用HtmlService和html模板将数据转换为html。以

的形式使用对象时
pRet.data = myObject;

在html模板代码中,例如:

<? for(var x in data) { ?>
<? data[x].create_date ?>

呈现为TypeError:无法从null读取属性“create_date”。但是,如果我将数据传递给模板,如下所示:

pRet.Data = myObject[143];

然后渲染的html循环并显示id为143的工厂的数据元素。如果我使用通过工厂ID返回植物作为数组索引的函数,那么我得到一个元素0到99的数组未定义的第一个元素具有任何数据,元素100对应于id为100的工厂。

我在apreadsheet中将数据呈现为对象的代码返回一个带有元素列表的对象,如下所示:

{143={stage_7=-1.0, index=20.0, stage_5=-1.0, stage_6=-1.0, stage_3=1.0, current_stage=1.0, strain=1.0, stage_4=0.0, location=1.0, stage_1=51.0, stage_2=61.0, id=143.0, create_date=Sat Dec 08 2012 00:00:00 GMT-0700 (MST), group=null}

将数据集作为在工厂id索引的数组返回的代码返回此结果,前100个元素为null,因为第一个工厂索引为100:

{stage_7=-1.0, index=1.0, stage_5=-1.0, stage_6=-1.0, stage_3=5.0, current_stage=2.0, strain=1.0, stage_4=-1.0, location=2.0, stage_1=Mon Jul 09 23:00:00 PDT 2012, stage_2=56.0, id=100.0, create_date=Sat Dec 08 2012 00:00:00 GMT-0700 (MST), group=null}

问题: 我可以尝试将数据从电子表格传递到渲染的html的其他方法是什么?我最初的想法是放弃在植物id上使用数组或对象索引中的元素的想法。另一个选择是使用数组并检查模板文件中的空条目。

1 个答案:

答案 0 :(得分:0)

HtmlService中存在一个已知错误,您无法将子属性分配给模板上的对象。所以这失败了:

var = HtmlService.createTemplate();
t.x = {};
t.x.y = 1;  // This throws no error, but t.x.y will still be undefined!

然而这有效:

var = HtmlService.createTemplate();
var x = {};
x.y = 1;
t.x = x;    // t.x.y will now correctly be 1

我们知道问题是什么,并计划修复它,但它并不重要,需要一些时间才能推出。