Backbone.js 在backbone.marionete中使用collection.fetch()分页

Backbone.js 在backbone.marionete中使用collection.fetch()分页,backbone.js,marionette,Backbone.js,Marionette,我正在尝试用主干实现分页。木偶的 通过首先执行初始提取进行compositeView: collection.fetch({reset: true}) 要将其他模型加载到同一集合中 collection.fetch({reset: false, remove: false}) 使用 我在每次使用fetch()和{reset:false}时都看到了这一点 将触发多个添加事件(对于每个添加的模型) 基本上这很好,但是当查看带注释的源代码时 在木偶图中compositeView的appendHtm

我正在尝试用主干实现分页。木偶的 通过首先执行初始提取进行compositeView:

collection.fetch({reset: true})
要将其他模型加载到同一集合中

collection.fetch({reset: false, remove: false})
使用

我在每次使用fetch()和{reset:false}时都看到了这一点 将触发多个添加事件(对于每个添加的模型) 基本上这很好,但是当查看带注释的源代码时 在木偶图中compositeView的appendHtml函数的 声明如下:

缓冲在重置事件和初始渲染时发生,以便 减少在文档中插入的次数,因为这样做很昂贵

虽然这对于初始获取(仅1个浏览器回流)非常有用,但每个 使用{reset:false}进行后续获取可能会非常昂贵 (在添加的每个型号上回流)。似乎真的 每次都追加()itemView-导致回流 (compositeView.isBuffering为false)

有没有办法“批量”处理模型并进行一次插入 (与重置事件上的操作相同)

这是否需要在appendHtml实现中进行覆盖 并自己实现批处理逻辑?

(我假设出于某种原因,您不想使用Backbone.paginator。如果不是这样,请使用插件;-D)

您可以使用与此处使用的过滤集合类似的技术:(instanceat)

基本上:为视图提供“分页集合”,分页集合的作用是:

  • 最初,返回原始集合的“克隆”副本
  • 在原始集合上获取时,将“批处理”中获取的事件添加到克隆集合,这将触发视图刷新(因为它正在侦听克隆集合,而不是原始集合)
要尽量减少回流,可以尝试以下操作:

  • 使集合侦听的事件静音(“添加”,等等)
  • 添加一组模型后,仅使用新模型创建集合视图的一个新实例
  • 呈现新的集合视图(但不要在任何地方显示),并手动将
    newView.el
    附加到DOM中的正确位置
  • 销毁
    newView

不幸的是,一旦您需要开始优化,您往往需要手动处理一大堆事情…

谢谢。由于我的分页类型类似于backbone.paginator的infinitiv分页,因此我查看了提供的示例。虽然它确实有助于实现机制本身,但它会逐个添加项目视图,从而导致每个项目的回流成本高昂。因此,它没有直接提到我所写的问题。实现更新UI的有效方法取决于实际的实现……提到的过滤集合似乎是经过深思熟虑的,它试图解决这个问题,但对于我想要实现的目标来说有点太复杂了。在获取初始收集数据后,我基本上是在寻找一个高效的UI更新,尽可能少的浏览器回流。再次感谢您的更新。我将评估建议的方法并尝试实现类似的东西。由于给定的输入,我将把这个问题标记为已接受-优化不是免费的。