2012-02-04 59 views
0

幫我找管理骨幹的觀點最好的辦法。方法隱藏/顯示骨幹模型視圖

例如,我有一個視圖集合MyCollectionView其中包含MyModelView - 集合中每個模型的視圖。

而如果我想隱藏/顯示頁面上某些型號?

現在我下面這樣:

  • 使用collection.each爲每model
  • 內環路的我稱之爲模型函數filter一些PARAMS
  • 在這個功能我檢查模特屬性和調用model.trigger 'hide'model.trigger 'show'
  • 最後在model view我使用this.model.bind 'hide', this.hide, this實際上我使用.hide().show()

這種方式看起來很糟糕...爲什麼我需要做這個長長的功能和事件鏈。有沒有最簡單的方法?

謝謝!

回答

2

您的模型不應該告訴意見他們應該做的 - 他們都應該來表示數據和控制應用程序不應該參加 - 因此無奇不有感覺錯了你:)

越優雅的方式將是一個過濾器方法添加到其中將使用下劃線的方法來篩選要顯示/隱藏,做的好?做其工作的意見MyCollectionView - 採摘哪些車型應該顯示。然後使用匹配數組調用一個方法來渲染列表,並將模型數組傳遞給它,以便它可以渲染匹配模型的視圖。

從我創造這樣的過濾器,我可以告訴你的經驗,這可能是更有效更長的名單中刪除整個列表做集級別過濾並再次渲染只有那些符合過濾查詢的意見。 jQuery的隱藏/顯示可能會帶來一點負擔 - 儘管這是一個你只有大量數據/視圖的問題。

也!乘坐開往到集合中的下劃線方法的優勢 - 你不需要做collection.each(...你可以做

var matches = collection.filter(function(model) { 
    return /*matching condition*/; 
}); 

(還記得渲染列表,並追加到DOM時使用DocumentFragment的預生成視圖列表而不是追加逐一)

+0

非常感謝您的回答。我還有一些額外的問題。爲什麼所有的邏輯應該在視圖內?我有很多關於過濾的陳述。我可以委託他們全部模型?在視圖過濾器動作中,只使用'return model.filter(conditions)'。之後,我需要調用我的渲染功能。 新視圖的呈現是interestion方法:) – ValeriiVasin 2012-02-04 22:57:15

+0

將過濾方法移動到集合類定義也很有意義。但是因爲它是幫助檢索數據的一個子集。模型和集合應該存儲數據,應該知道數據的有效性等,但不應該操縱它或改變,因爲這是控制應用程序流的結構的角色 - 在骨幹視圖中扮演着這個角色。 – 2012-02-05 01:48:45

+0

作爲一個使用過濾作爲視圖方法而不是集合的例子,當我有一個特殊的ListView類正在處理呈現列表(使用documentFragment,我在那裏提到)而沒有意識到時,我可以給你一個我的使用項目視圖或集合的類型和結構 - 作爲一個選項,您可以通過項目視圖工廠方法,篩選條件和視圖根據用戶設置的篩選器決定顯示的內容,並負責選擇正確的模型從集合中創建視圖並渲染 – 2012-02-05 01:52:28