骨干.js分页

Posted

技术标签:

【中文标题】骨干.js分页【英文标题】:backbone.js pagination 【发布时间】:2011-10-18 02:44:17 【问题描述】:

我开始使用 Backbone 并尝试将 Rails 后端的 html 模板转换为 javascript 模板。

我认为使用主干会更有利的一件事是它的模型和集合的概念。 比如说,我有 100 条记录,并且将这些记录分页到每页 10 条,通常情况下,如果没有大量的 javascript 工作,几乎不能指望 cachedajax一页分页体验。意思是说,我登陆第一页,现在点击第二页,第二页请求接下来的 10 条记录 ajax'ly,如果我然后点击第一页,我将不再向服务器发出任何请求,因为它在那里.

我没有编写任何代码,但谁能告诉我如何将 ajax 请求的新到达数据附加到现有集合以进行分页?

例如,请记住 Backbone 的文档说,您第一次加载的页面应该真正包含引导数据,而不是第二次获取它们。所以

var projects_data = <%= @projects.to_json.html_safe %>;
var projects = new Cafe.Collections.ProjectsCollection();
var projects.reset(projects_data);

现在我的项目变量包含前 10 条记录,我有人检索另一轮 10 条记录,例如,我将这些新到达的 10 条记录保存在变量中

var projects_data_new = ...

我可以将它们附加到现有的“项目”集合中吗?

或者在分页的情况下,这不是 Backbone 中鼓励的设计模式吗?

【问题讨论】:

【参考方案1】:

希望你现在已经解决了这个问题 :) 正如Elf Sternberg 指出的那样,神奇之处在于定义您的集合的 parse() ,下面的链接进一步解释了这一点:

first whack at pagination with backbone.js

例如如何写parse:

// 假设我们发送一个像 page: 1, per_page: 3, total: 233, 型号:...

parse: function(resp) 
    this.page = resp.page;
    this.perPage = resp.per_page;
    this.total = resp.total;
    return resp.models;
  

一旦您的收藏中包含这些详细信息,您只需相应地调整您的视图,鉴于您已经到此为止,我相信这不会那么难:)

【讨论】:

哇,这个要点快一年了!他是高级!我还没有完成从 erb 部分和模板到 Backbone+underscore 模板的整个过渡。但它不仅仅是“在雷达上”,正如我所看到的,它是必须的,因为,纯粹是因为速度和在服务器上更容易(目标是绕过 JSON 的 Rails 堆栈,因为我已经在使用 MongoDB ,默认情况下会生成 JSON)。非常感谢您在这里的跟进。确实会发布我的一些关于我如何回馈的要点的版本。 是的,我也很惊讶我昨晚使用了一岁的 Gist :D 我刚刚在 Google 上的主干.js 中搜索了分页,这是第一个出现的。它真的很有帮助,我很高兴能帮助你:) 哈,一个月后你才回来笑:)他是先进的 有人赞成这个答案,所以我重读了你的评论,我有时会这样做:P 我花了几天时间稍微改进了这个要点,并以GitHub project 的形式发布了它。还支持一些基本的页面缓存。希望这会有所帮助。【参考方案2】:

在骨干网 0.5 及更高版本中,当您调用 fetch() 时,可以指定您希望添加而不是替换客户端上存在的数据集:fetch(add: true)。这会将新对象附加到现有的 projects 集合中。您仍然必须最终处理分页演示问题。

该集合也只会在它们通过Backbone.Collection.parse() 运行后获取要添加/获取的 JSON 对象,您可以覆盖它以执行诸如“与项目一起,给我服务器上所有对象的计数,并仅将项目返回到添加/获取。”然后,您可以使用此元数据正确显示用户可以浏览的页面数。如果你想真正聪明,你可以将集合用作稀疏数组(我的经验是这对于标准台式机或笔记本电脑上少于 10,000 个项目的集合来说很好,但不是平板电脑),并让用户翻转任意浏览页面,根据需要获取填充物。

【讨论】:

感谢 Elf,“聪明”的方法听起来很有趣(!),请问“稀疏数组”是什么意思? 稀疏数组是指并非所有对象都存在的数组;例如,如果您有“每页 10 个项目”的分页,您可能有对象 1-10、40-50 和 90-100。这意味着你的集合中的每个对象不仅需要它本身,还需要它在(抽象或服务器端)集合中的位置,而不是仅仅定位你的索引并吐出接下来的十个,你必须过滤集合,确定如果对象存在,则获取它们,如果它们不存在,并重复过滤过程以显示它们。 知道了!感谢您写下这一切。

以上是关于骨干.js分页的主要内容,如果未能解决你的问题,请参考以下文章

react-slick 自定义分页分页道具使用

单页分页问题中的多个角度材料表

梦内容页分页标题提取

一个视图中的 CI 多页分页,

以多页分页打印所有数据

CakePHP 2中带有分页分页类的大小为f数组的问题