我想使用客户端脚本同时创建多个记录。这就是我正在做的:
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();
}
创建了三个记录,但唯一的第一个具有数据。其他两个记录在其字段上具有空值。我该如何实现?
谢谢。
更新(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”?
谢谢。
答案 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。因此,您要做的就是转到模型的数据源,然后单击“手动保存模式”复选框。
然后使用与上面相同的代码。唯一的区别是,为了将更改持久保存到服务器,您需要显式保存更改。因此,您要做的就是在 for循环块之后添加以下内容:
app.datasources.Reservation.saveChanges(function(){
//TODO: Callback handler
});