Google app maker 在Appmaker中显示数据源总页面的最佳方式

Google app maker 在Appmaker中显示数据源总页面的最佳方式,google-app-maker,Google App Maker,我有一个谷歌驱动器表数据源,其中存储的开放位置列表。现在在数据源中,我将“每大小查询”字段设置为10,这样每页可以获得10条记录。我还添加了一个寻呼机来显示分页 我的查询是,我希望向最终用户显示“第1页,共X页”,并且该X将根据某些搜索筛选器而有所不同。在Appmaker中实现这一点的最佳方法是什么 我曾尝试按照下面的代码计算数据源中的总记录,但每次都用搜索条件更新记录并重新计算,这不是一个合适的解决方案 //Server side var newQuery = app.models.C

我有一个谷歌驱动器表数据源,其中存储的开放位置列表。现在在数据源中,我将“每大小查询”字段设置为10,这样每页可以获得10条记录。我还添加了一个寻呼机来显示分页

我的查询是,我希望向最终用户显示“第1页,共X页”,并且该X将根据某些搜索筛选器而有所不同。在Appmaker中实现这一点的最佳方法是什么

我曾尝试按照下面的代码计算数据源中的总记录,但每次都用搜索条件更新记录并重新计算,这不是一个合适的解决方案

//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的建议。我已经做到了,在这里更新了我的答案。