【问题标题】:Parse.com: How to paginate results from a Parse.Query?Parse.com:如何对 Parse.Query 的结果进行分页?
【发布时间】:2014-01-23 21:31:53
【问题描述】:

目前,我正在使用 Javascript Parse.Object.extend 查询结果,并使用 underscoreJS 将这些结果模板化到一个列表中。

这是查询 Parse Object 并将对象添加到 Underscore 模板的代码。

var Assignment = Parse.Object.extend("Assignments");
var query = new Parse.Query(Assignment);
query.descending('updatedAt');  

query.find({
    success: function(results) {
        console.log("Success");
            var tableTemplate = $("#list-template").html();
$("#assignmentdisplay").html(_.template(tableTemplate,{results:results}));

    },
    error: function(error) {
        alert("Error: " + error.code + " " + error.message);
    }
});

这是下划线模板。

<script type="text/html" id='list-template'>
                <% _.each(results,function(result){ %>
            <li id="list-group-item">
        <h4 class="list-group-item-heading"><%= result.get("Title") %></h4>
                    <p class="list-group-item-text"><%= result.get("Content") %></p>
                    <p class="list-group-item-text"><%= result.get("Categories") %></p>
                    </li>
    <% }) %>

</script>

但是,我不明白如何在 Parse 和 Underscore 中对结果进行分页。

我已经尝试过backbone paginator,但我对 Backbone 不是很好,我只是不明白如何将它与 Parse 查询结合使用。

如果我必须使用其他模板解决方案,或者除了主干分页器之外的其他分页解决方案,也可以。任何事情都会有所帮助,我对这个分页很感兴趣。

编辑:

Parse.com 有skip() 和limit(),不知怎的,据说这很有用,但我不知道如何实现。

【问题讨论】:

  • 您是要按查询分页,还是将单个查询分成多个页面?
  • 多页就好了。但是我没有分页的经验,所以我无处可从。
  • 在此处回答中使用“skip”、“limit”:stackoverflow.com/questions/20006550/…

标签: javascript backbone.js pagination underscore.js parse-platform


【解决方案1】:

这里只是一个抽象的分页示例。应该说明这个概念,您可以根据自己的具体情况对其进行调整。

// Set the current page number usually zero works great to start
// This is an arbitrary ex. but this value will come from your page (e.g. link etc.)
var page = 0;

// How much you want on a page
var displayLimit = 50;

// Get the count on a collection
var count;
myCollection.count().then(function(result){ count = result; });

// Your query
var Assignment = Parse.Object.extend("Assignments");
var query = new Parse.Query(Assignment);
query.descending('updatedAt');
query.limit(displayLimit);
query.skip(page * displayLimit);
// So with this above code, on page 0, you will get 50 results and skip 0 records.
// If your page var is 1, you'll skip the first 50 and get 50 results starting at 51
// So on so forth...
query.find()...

因此,您的链接可以以某种方式将页面数据编码在其中,当您单击它时,您的函数将知道要跳转到哪个页面并获取适当的页面。下一个/上一个的概念是相同的。在 Next 上,您只需执行 page++,在 Prev 上,您可以执行 page--

希望这会有所帮助。

编辑:

如果您想要显示 237 个作业中的第 51-100 个作业,您需要先发送.count() 以获取记录总数。

要获取起始编号,只需像 (page * displayLimit) + 1 要获取结束编号,请记住,如果您在最后一页,您可能没有完整的 50 条记录或任何您的 displayLimit 。

【讨论】:

  • 虽然 Parse.com 关闭了,但不确定这对现在有多大帮助。好吧,每个数据库分页任务的概念通常都是相同的。呵呵。
  • 是的,我听说过解析,但这个逻辑对于每个数据库都是相同的。我想问一下,在加载其他 50 条记录后,将它们添加到数组中以显示聊天消息,如果有新消息出现,这个逻辑应该起作用吗?
  • 在上面的示例中,paging++ 没有考虑到正在创建的新记录。因为它是递减的,假设有 50 条新消息进来。第 2 页将跳过 50 条新消息,并产生与第 1 页相同的 50 条消息。这不一定是错误的,因为第 1 页应该是 50 条最新消息。在聊天中,您可能对旧的不太感兴趣而对新的更感兴趣。跟踪已获取的最新消息的时间戳。然后,您获取最新信息的查询将按降序查找大于最后一个时间戳的所有消息并将其添加到前面。
  • 好的,谢谢#orangewarp
  • 我想问最后一个问题。 :-) 你说的最后一行“获取最新的查询将查找所有大于上一个时间戳的味精”这意味着我必须创建 1 个查询来获取新的味精和另一个用于您在上面给出的分页并管理用这两个查询查看?
猜你喜欢
  • 2019-06-24
  • 1970-01-01
  • 2021-05-22
  • 2015-02-16
  • 2018-04-03
  • 2019-12-23
  • 2016-03-21
  • 2023-03-10
相关资源
最近更新 更多