2011-09-05 85 views
5

我有我的Backbone.js的我實現一個典型的主詳細情況。Backbone.js的主詳細情況

因爲我不關心Backbone.js的,所以我跳過它的歷史和導航部分的時刻。

  • 我有一個GridView,其中所有模型都從休息服務中獲取並顯示。
  • 我有其中來自電網的特定選擇的模型顯示與出現在主網格視圖更多字段的DetailView(模態窗口)。

我已經實現:

  • 所有骨幹的意見和路由器連接主應用程序。
  • 應用程序上的文件初始化加載
  • 主骨幹路由器(作用更象是一個經典的「控制器」)配有責任:
    • 創建和銷燬的觀點
    • 取出和發佈數據
    • 通過數據視圖
    • 協調意見事件

現在從爲GridView(骨幹集合),其餘服務返回的數據僅是該機型的一些部分數據。

所以要顯示一個特定的模式,我不得不從其餘的服務再次讀取該細節的全部細節。

從模型的讀取與從集合並在其上的任何更新斷開的模型最終不會反映在集合本身,我必須再次刷新獲取所有數據的主視圖。

摧毀與重建的詳細信息視圖有時使其失去了查看事件。

什麼是正確執行此方案的? 我不完全理解在骨幹中做事的最佳方式。

回答

7

首先,我建議你「的GridView」集合查詢返回的全部細節的模型。這解決了'斷開收集'問題。

雖然,你不必做充分收集負載 - 比方說做整個收集滿負荷行不通 - 細節過於龐大,例如,你應該能夠通過從收集到您的詳細取景模式,測試,看看它的部分負荷或滿負荷,並出具了「取()」爲模型,返回完整的數據 - 是,這是相同的模型作爲收集,它應該更新。那有意義嗎?

另外,對於詳細視圖,我會建議,特別是如果您只設計了一個活動的詳細視圖調用,可以在視圖中重新使用視圖並編寫一個函數,以允許您更換模型。

因此,簡言之:

  • 在應用程序啓動,加載一個GridView和一個的DetailView。
  • 重構您的detailView以允許在其上設置模型。 (detailView.setModel(..)
  • 當用戶想要查看模型上的細節時,使用上述函數將該模型傳遞到detailView中
  • 如果模型未完全加載,您的setModel方法可以你可以測試某個特定的屬性,這個屬性只會在滿負荷時出現,或者在模型上設置一個屬性來表明它是否已經被完全加載。
  • 如果你發現自己失敗事件,請嘗試在render()函數結束時調用delegateEvents()函數重新綁定事件
  • 由於在gridView集合和detailView中都使用了相同的模型,因此假設您正在響應更改事件正確,平安應該同步。