Google app maker 在Appmaker中显示数据源总页面的最佳方式
我有一个谷歌驱动器表数据源,其中存储的开放位置列表。现在在数据源中,我将“每大小查询”字段设置为10,这样每页可以获得10条记录。我还添加了一个寻呼机来显示分页 我的查询是,我希望向最终用户显示“第1页,共X页”,并且该X将根据某些搜索筛选器而有所不同。在Appmaker中实现这一点的最佳方法是什么 我曾尝试按照下面的代码计算数据源中的总记录,但每次都用搜索条件更新记录并重新计算,这不是一个合适的解决方案Google app maker 在Appmaker中显示数据源总页面的最佳方式,google-app-maker,Google App Maker,我有一个谷歌驱动器表数据源,其中存储的开放位置列表。现在在数据源中,我将“每大小查询”字段设置为10,这样每页可以获得10条记录。我还添加了一个寻呼机来显示分页 我的查询是,我希望向最终用户显示“第1页,共X页”,并且该X将根据某些搜索筛选器而有所不同。在Appmaker中实现这一点的最佳方法是什么 我曾尝试按照下面的代码计算数据源中的总记录,但每次都用搜索条件更新记录并重新计算,这不是一个合适的解决方案 //Server side var newQuery = app.models.C
//Server side
var newQuery = app.models.Company.newQuery();
var records = newQuery.run();
var totalCount =0;
for(var i=0;i<records.length;i++)
{
totalCount=totalCount+1;
}
return totalCount;
//服务器端
var newQuery=app.models.Company.newQuery();
var records=newQuery.run();
var totalCount=0;
对于(var i=0;i,如果您的表中没有任何筛选器,那么您的服务器代码可以简单到
//服务器脚本
函数GetPageScont(页面大小){
var recordscont=app.models.MyModel.newQuery().run().length;
var pageScont=Math.ceil(recordScont/pageSize);
返回页面搜索;
}
作为一种选择,您可以考虑用单个字段创建<代码> PagesCount < /代码> ./p>
如果您有一些与表关联的筛选器,那么您需要使用完全相同的筛选器运行页码查询
很可能整个设置无法有效地处理驱动器表,因为如果不查询记录本身,就无法查询记录数。使用云SQL数据后端,可以使用轻量级本机SQL查询创建(此处:PageSize
是查询参数,应等于实际数据源的查询.限制
):
选择
Ceil(计数(1)/:页面大小)作为记录成员
从…起
表名
哪里
...
我使用帕维尔建议的计算模型实现了这一点
步骤:
创建具有一个字段计数的计算数据源
在该数据源中添加一个参数searchQuery
。这将包含用户过滤器。目前,我只有一个搜索查询,用户可以在其中搜索许多内容。因此,我只添加了一个参数
在此数据源中添加以下服务器脚本
代码:
//服务器脚本
函数getTotalRecords(查询){
var receivedQuery=query.parameters.searchQuery;
//log('Received query:'+query.parameters.searchQuery);
var records=app.models.Company.newQuery();
records.parameters.SearchText=query.parameters.searchQuery;
if(receivedQuery!==null){
records.where='(名称包含?:SearchText或InternalId包含?)+
“:SearchText或LocationList包含?:SearchText)”;
}
var recordscont=records.run().length;
var calculatedModelRecords=[];
var draftRecord=app.models.RecordCount.newRecord();
draftRecord.count=''+recordsCount;
计算模型记录推送(draftRecord);
返回已计算的模型记录;
}
在Appmaker页面上,将标签与此数据源绑定
在search query/your filter applied事件中,添加以下代码,重新加载此数据源并为参数赋值
//客户端脚本
函数updateRecordCount(newValue){
var ds=app.datasources.RecordCount;
ds.query.parameters.searchQuery=newValue;
ds.unload();
ds.load();
}
不幸的是,我使用的是谷歌驱动器表,并且还有过滤器。因此我认为我根本不应该添加总页面。感谢您的支持。我如何才能以同步方式调用此服务器脚本代码?我从客户端调用它,但在它返回任何值之前,客户端代码执行完成。您可以使用承诺()并等待(),但我不鼓励您以同步方式实现应用程序。谢谢Pavel的建议。我已经做到了,在这里更新了我的答案。