代码之家  ›  专栏  ›  技术社区  ›  Darpan Sanghavi

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

  •  1
  • Darpan Sanghavi  · 技术社区  · 6 年前

    我有一个Google drive table数据源,其中存储了空缺职位列表。现在在数据源中,我将“按大小查询”字段设置为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;
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Pavel Shkleinik    6 年前

    如果你的表中没有任何过滤器,你的服务器代码可以简单到

    // Server script
    function getPagesCount(pageSize) {
      var recordsCount = app.models.MyModel.newQuery().run().length;
      var pagesCount = Math.ceil(recordsCount / pageSize);
    
      return pagesCount;
    }
    

    作为替代方案,您可以考虑创建 Calculated Model 只有一个字段 PagesCount .

    如果您有一些与表关联的过滤器,那么您需要使用完全相同的过滤器来运行页码查询。

    最有可能的是,整个设置将无法有效地处理驱动器表,因为如果不查询记录本身,就无法查询记录编号。通过云SQL数据后端,您可以创建 Calculated SQL Model 使用轻量级本机SQL查询(此处为 :PageSize 是查询参数,该参数应等于 query.limit (实际数据源的名称):

    SELECT
      Ceil(COUNT(1) / :PageSize) AS RecordsNumber
    FROM
      TableName
    WHERE
      ...
    
        2
  •  0
  •   Pavel Shkleinik    6 年前

    我已经通过计算模型实现了这一点 帕维尔 .

    步骤:

    1. 创建具有一个字段计数的计算数据源。
    2. 在该数据源中添加一个参数 searchQuery 。这将包含用户筛选器。目前我只有一个搜索查询,用户可以在其中搜索很多东西。所以我只添加了一个参数。
    3. 在此数据源中添加以下服务器脚本。

    代码:

    // Server script
    function getTotalRecords(query) {
      var receivedQuery = query.parameters.searchQuery;
      // console.log('Received query:' + query.parameters.searchQuery);
    
      var records = app.models.Company.newQuery();
      records.parameters.SearchText = query.parameters.searchQuery;
    
      if(receivedQuery !== null) {
        records.where = '(Name contains? :SearchText or InternalId contains? ' +
          ':SearchText or LocationList contains? :SearchText )';
      }
    
      var recordsCount = records.run().length;
      var calculatedModelRecords = []; 
      var draftRecord = app.models.RecordCount.newRecord();
      draftRecord.count = ''+recordsCount;
      calculatedModelRecords.push(draftRecord);
    
      return calculatedModelRecords;
    }
    

    .

    1. 在Appmaker页面上,将标签与此数据源绑定。
    2. 在search query/your filter applied事件中,添加以下代码,重新加载此数据源并为参数赋值。
    // Client script
    function updateRecordCount(newValue) {
      var ds = app.datasources.RecordCount;
      ds.query.parameters.searchQuery = newValue;
      ds.unload();
      ds.load();
    }