【问题标题】:Active filter for backbone.js collections用于主干.js 集合的主动过滤器
【发布时间】:2012-07-20 00:42:38
【问题描述】:

我的骨干收藏有一点问题。我只想显示 6 个模型,并且总是最新的 6 个。我使用 CollectionBinder (Backbone.ModelBinder) 来呈现和显示我的收藏,并使用 RailsFayeSubscriber 将它们与服务器同步。

问题是我不知道如何始终保持集合 6 个模型大。我尝试添加一个 this.on("add") 并在那里使用 .first(6) 来保留我想要的 6 个模型,但问题是我认为 CollectionBinder 或 RailsFayeSubscriber 也有 add-trigger 并抛出我关于集合中缺失模型的错误。

最好的办法是拥有比较器之类的东西,它总是对模型进行排序,但在这种情况下,某种有源滤波器总是保持 6 个模型的大小。

有什么想法吗?

【问题讨论】:

  • 允许 GETurl/post/latestnew collection 绑定到。该网址应该返回您想要的最新 6 个。每分钟轮询一次以加载最新的。什么都不需要了

标签: javascript collections backbone.js faye modelbinder


【解决方案1】:

一个(有点老套的)解决方案是中断流程。所以目前你有:

  1. 集合被添加到
  2. 您的处理程序关闭,“搞砸”了集合
  3. 您的图书馆的一个处理程序失控,并感到不安

你想要的是:

  1. 集合被添加到
  2. 您的图书馆的一个处理程序关闭,并且没有假发
  3. 您的代码失效了

可能有一些方法可以使用 Backbone 的事件系统来实现上述情况,但您也可以作弊:

  1. 集合被添加到
  2. 您的处理程序关闭,并设置超时以在 1 毫秒内“搞砸”集合 (window.setTimeout(_.bind(this.limitTo6, this), 1))
  3. 您的图书馆的一个处理程序关闭,并且没有假发
  4. 您的超时(正常代码流完成后 1 毫秒)消失,并在不破坏我们的库的情况下弄乱了集合

【讨论】:

  • 谢谢!它有效,但我仍然更喜欢更“优雅”的解决方案。
  • 我明白,但是由于您的基本问题是其他人的代码,因此任何可能的解决方案的优雅都会受到限制(因为真正优雅的解决方案是修改他们的代码以更好地与您的)。您可能想要考虑的一个选项是重新安排绑定事件的顺序,除此之外......好吧,祝你好运:-)
【解决方案2】:

我在这个post中使用了事件聚合器方法

不同之处在于,不是将聚合器添加到视图中,而是将其添加到集合中。创建第二个集合,它将充当您的“视图模型”,其中包含 6 个项目。第二个集合可以绑定到整个集合上的添加/重置事件。然后事件处理程序可以填充绑定的集合并触发重置事件,以便您的视图代码看起来和往常一样。

这似乎保持了对数据操作和精简视图的惯用主干重点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2017-06-02
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    相关资源
    最近更新 更多