如何在客户端脚本文件中一次创建多个项目/记录或一次保存项目/记录数组

时间:2019-03-22 10:09:05

标签: google-app-maker

我想使用客户端脚本同时创建多个记录。这就是我正在做的:

var ceateDatasource = app.datasources.Reservation.modes.create;
var newItem = ceateDatasource.item;

newItem.User = user; //'eric'
newItem.Description = description; //'000'
newItem.Location_Lab_fk = lab.value.Id; //'T'
newItem.Area_fk = area.value.Id; //'L'
newItem.Equipment_fk = equipment.value.Id; //'S'

for(var i = 0 ; i < 3; i ++) {
  newItem.Start_Date = startDate;
  newItem.Start_Hours = '03';
  newItem.Start_Minutes = '00';

  newItem.End_Date = startDate;
  newItem.End_Hours = '23';
  newItem.End_Minutes = '30';

  // Create the new item
  ceateDatasource.createItem();
}

但是我得到的结果是: enter image description here

创建了三个记录,但唯一的第一个具有数据。其他两个记录在其字段上具有空值。我该如何实现?

谢谢。



更新(2019-3-27):

我可以通过将所有内容放入 for循环块来使其工作。但是,我还有另一个问题。

是否有类似以下示例代码的方法?

var recordData = [Data1, Data2, Data3] 
var ceateDatasource;
var newItem = new Array(recordData.length) ;

for(var i = 0 ; i < recordData.length; i ++) {
  ceateDatasource = app.datasources.Reservation.modes.create;
  newItem[i] = ceateDatasource.item;

  newItem[i].User            = recordData[i].user;
  newItem[i].Description     = recordData[i].Description;
  newItem[i].Location_Lab_fk = recordData[i].Location_Lab_fk;
  newItem[i].Area_fk         = recordData[i].Area_fk;
  newItem[i].Equipment_fk    = recordData[i].Equipment_fk;

  newItem[i].Start_Date    = recordData[i].Start_Date;
  newItem[i].Start_Hours   = recordData[i].Start_Hours;
  newItem[i].Start_Minutes = recordData[i].Start_Minutes;

  newItem[i].End_Date    = recordData[i].End_Date;
  newItem[i].End_Hours   = recordData[i].End_Hours;
  newItem[i].End_Minutes = recordData[i].End_Minutes;
}

// Create the new item
ceateDatasource.createItem();

首先,它准备一个数组“ newItem”,并且仅调用一次“ ceateDatasource.createItem()”来保存所有新记录(或项目)。 我尝试使用此方法,但它只保存最后一条记录'newItem [3]'。

我需要在“ ceateDatasource.createItem()”中编写一个回调函数,但Google App Maker总是显示警告“不要在循环内创建函数”。那么,有没有一种方法可以一次调用“ createItem()”来保存多条记录?还是有一些可以使用的功能,例如“ array.push”?

谢谢。

1 个答案:

答案 0 :(得分:1)

根据AppMaker的official documentation

  

创建数据源是用于在特定数据源中创建项目的数据源。它的 item 属性始终由草稿项目填充,该项目可以绑定或以编程方式设置。

您要执行的操作是从同一草稿项目创建三个项目。那就是为什么看到结果的原因。如果要创建多个项目,则需要为每个项目创建一个草稿项目,因此只需将所有代码放入for循环中即可。

for(var i = 0 ; i < 3; i ++) {

  var ceateDatasource = app.datasources.Reservation.modes.create;
  var newItem = ceateDatasource.item;

  newItem.User = user; //'eric'
  newItem.Description = description; //'000'
  newItem.Location_Lab_fk = lab.value.Id; //'T'
  newItem.Area_fk = area.value.Id; //'L'
  newItem.Equipment_fk = equipment.value.Id; //'S'

  newItem.Start_Date = startDate;
  newItem.Start_Hours = '03';
  newItem.Start_Minutes = '00';

  newItem.End_Date = startDate;
  newItem.End_Hours = '23';
  newItem.End_Minutes = '30';

  // Create the new item
  ceateDatasource.createItem();
}

如果要使用客户端脚本同时保存多条记录,那么您要寻找的是Manual Save Mode。因此,您要做的就是转到模型的数据源,然后单击“手动保存模式”复选框。

enter image description here

然后使用与上面相同的代码。唯一的区别是,为了将更改持久保存到服务器,您需要显式保存更改。因此,您要做的就是在 for循环块之后添加以下内容:

app.datasources.Reservation.saveChanges(function(){
     //TODO: Callback handler
});