2012-07-20 82 views
0

我的主幹集合有點問題。我只想顯示6個模型,並且總是最新的6.我使用CollectionBinder(Backbone.ModelBinder)來呈現和顯示我的集合,並使用RailsFayeSubscriber將它們與服務器同步。backbone.js集合的有效過濾器

問題是,我不知道如何始終保持集合6模型大。我已經嘗試添加一個this.on(「add」),並使用.first(6)來保持我想要的6個模型,但問題是我認爲CollectionBinder或RailsFayeSubscriber也有添加觸發器並拋出我有關集合中缺少模型的錯誤。

最好的事情就是擁有像比較器這樣的東西,總是對模型進行排序,但在這種情況下,某種有源濾波器始終保持6個模型的大。

任何想法?

+0

允許'GET'到'url'像'/ post/latest'等'新集合'綁定到。該網址應該返回你想要的最新的6個。每分鐘輪詢一次以加載最新的。沒有更多需要 – Deeptechtons 2012-07-20 05:07:51

回答

1

一個(有點哈克)解決方案將是中斷流程。所以目前你有:

  1. 藏品被添加到
  2. 處理程序熄滅,「搞亂」集合
  3. 圖書館的處理的一個熄滅,並得到不高興

什麼你想要的是:

  1. 藏品被添加到
  2. 一個圖書館的處理器的熄滅,並且不假髮出來
  3. 代碼熄滅

有可能某種方式與骨幹網的事件系統作出上述發生打,但你也可以欺騙:

  1. 藏品被添加到
  2. 處理程序會熄滅,並設置一個超時以「搞亂」集合中的1毫秒(window.setTimeout(_.bind(this.limitTo6, this), 1)
  3. 圖書館的處理的一個熄滅,並且不出來假髮
  4. 您的超時時間(1ms的正常碼流完成後)熄滅,食堂收集不cheesing了我們的圖書館
+0

謝謝!它有效,但我仍然更喜歡更「優雅」的解決方案。 – jonepatr 2012-07-20 01:27:44

+0

我明白了,但是因爲你的基本問題是別人的代碼,所以任何可能的解決方案的優雅都會受到限制(因爲真正優雅的解決方案是修改他們的代碼以更好地發揮你的代碼)。您可能希望查找的一個選項是重新排列綁定事件的順序,並且超出該範圍......好吧,祝您好運:-) – machineghost 2012-07-20 01:50:20

0

我已經使用了事件聚合方法在此post

扭轉不是將聚合器添加到視圖中,而是將其添加到集合中。創建第二個集合,充當您的「視圖模型」,其中包含您的6個項目。第二個集合可以綁定到完整集合上的添加/重置事件。然後,事件處理程序可以填充綁定的集合並觸發重置事件,以便您的視圖代碼看起來與以往一樣。

這似乎保持了對數據操作和更薄視圖的習慣性骨幹關注。