2013-05-31 121 views
0

我剛剛開始爲一個新的碰撞項目使用backbone.js。我的應用程序有一個動態(數據驅動)用戶菜單。每個菜單選項都是一組混合類型的圖表/小表格。例如,銷售概覽菜單選項可以包含一個包含2個餅圖對象,2個折線圖,條形圖等的頁面。我不知道菜單選項將會是什麼,也不知道每個菜單選項會帶來什麼。backbone可以集合包含不同類的模型對象嗎?

我正在考慮通過擴展Backbone.Model - PieModel,BarModel,DispersionModel等來定義一堆泛型模型「類」。相應的View類可以呈現類型的對象 - PieView,LineView等等。然後,我可以按照動態配置的定義將這些頁面組合在一起來組裝頁面。每個模型實例的數據url可以通過動態配置輕鬆生成。

我的第一個擔心是Backbone是否支持混合模型類型的集合。這是由一個集合的「模型」屬性的存在 - 是否假定同質性?但它也表示一個集合可以容納一組有序的模型......模型屬性可以是多態的......一種獲得集合中「模型」的方法。我應該將其作爲「模型對象」來閱讀嗎?

對我來說「頁面」實際上是這樣的對象的集合。我想立即創建一個集合,並使用不同模型類型的實例來填充它。然後通過一個View渲染。或者,使用各種模型對象的數組創建一個視圖,並渲染視圖,將所有集合全部繞過。

我將非常感謝您對我介紹的設計方面的投入,以及關於主幹的良好參考以及如何在混合模型案例中部署集合的清晰度?也許有一個不同的,更聰明的方式來處理這種情況...

謝謝。

回答

2

只有在將普通對象傳遞到其加法函數(例如,)時,它們才真正使用它們的model屬性。addpush)。如果您看一下the source,則每個加法器函數都會通過_prepareModel傳遞輸入,該輸入檢查輸入是否爲Backbone.Model的實例。如果不是,它會嘗試使用集合的model實例化一個新模型,否則它只會返回未改動的輸入。

所以只要你總是添加真正的模型對象到你的集合,你應該很好用不同的類型。

但是,如果你打算使用該型號的屬性(例如pluck)充當聚合函數,你可以運行到當函數試圖獲得在一個屬性的錯誤並不在一個類型的模型存在(儘管大多數時候我認爲它會默默地失敗,這可能是你想要的)。

+0

謝謝。我會嘗試使用Backbone.Model模型。由於這些主要是可視化小部件,因此它們之間沒有太多互動。 – Dinesh

1

我不知道如果我有100%的正確理解您的方案,但是,我不相信你在想着這在正確的道路......

在我看來,你的模型應該包含數據,和意見應該代表他們。因此,在銷售環境中,您可能有一個SalesData型號,可以在PieView,BarViewTableView中顯示。嘗試從數據中完全分離顯示邏輯 - 在我看來,圖表類型屬於顯示邏輯。

通過上述方法,每個頁面將包含一組不同的視圖,如果您覺得需要,您可能會在主視圖中包含這些視圖。每個視圖都有它自己的模型(或者根據你如何構造數據的集合),然後你可以使用普通的Backbone方法來更新/操作。

據我所知,一個集合不可能包含不同類型的模型,但即使是這樣,我也不會推薦它,因爲它會使代碼複雜化很多。

在學習資源方面,這裏有一對夫婦:

Learn Backbone JS compeltely -- javascriptissexy.com - 這是一個非常徹底,但需要一定的時間才能通過。

Backbone patterns - 讓你處於正確的心境更快。

+0

我原則上同意你的意見;然而,我的應用程序不同之處在於,演示是業務結束.... +1爲值得探索的良好鏈接。 – Dinesh

相關問題