我开始使用 Backbone 并尝试将 Rails 后端的 html 模板转换为 javascript 模板。
我认为使用主干会更有利的一件事是它的模型和集合的概念。
比如说,我有 100 条记录,并且将这些记录分页到每页 10 条,通常情况下,如果没有大量的 javascript 工作,就很难期待缓存的、ajax 的单页分页体验。意思是,比如说,我登陆第一页,现在点击第二页,第二页请求接下来的 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 中鼓励的设计模式吗?
最佳答案
在 Backbone 0.5 及更高版本中,当您调用 fetch()
,可以指定您希望添加而不是替换客户端上存在的数据集:fetch({add: true})
.这会将新对象附加到现有的 projects
收藏。您仍然必须最终处理分页演示问题。
该集合也仅在运行完 Backbone.Collection.parse()
之后才获取要添加/获取的 JSON 对象。 ,您可以覆盖它以执行诸如“与项目一起,给我服务器上所有对象的计数,并仅将项目返回到添加/获取”之类的操作。然后,您可以使用此元数据正确显示用户可以翻阅多少页。如果你想真正聪明,你可以将集合用作稀疏数组(我的经验是这对于标准台式机或笔记本电脑上少于 10,000 个项目的集合很好,但不是平板电脑),并让用户翻转任意浏览页面,根据需要获取填充物。
关于ruby-on-rails - Backbone .js分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910088/