我目前正在構建一個應用程序,使用Backbone.js和多種不同的模型,這些模型以各種方式相互關聯。我目前正在嘗試各種架構方法。Backbone.js - 全球/共享/相關模型的最佳方法是什麼?
簡而言之模型關係看起來是這樣的:
Workspace > Projects > Tasks
還有一些其他車型,如清單和類別,附加到一個項目。
在有任務列表的頁面,我傾銷任務的JSON到頁面上,填補了集合。這工作正常,但目前所有任務都拉入他們自己的項目數據。
task.project.id
task.project.name
該項目也被拉到頁面上各種其他地方的各種名單。任務也可以是分配給項目的列表的一部分。這意味着我也會提出請求,在各個地方爲項目提供列表。
與此的主要問題是,在地方更新模型時,我需要找到某種方式來「同步」他們。這太瘋狂了。他們應該都使用相同的模型實例,以便每個視圖都使用相同的模型,並相應地進行更新,而無需執行任何操作。
我一直在研究各種Backbone.js的建築設計,試圖找到答案。例如,Chaplin(https://github.com/moviepilot/chaplin)使用中介對象在視圖之間傳遞數據。使用這種方法,我可以在中介上創建一個Projects集合,並通過中介對象將其傳遞給各個視圖。
每個項目將包括它的所有名單,類別,分配的用戶等。然後我可以要求一個項目的模型,像這樣:
App.Projects.get(12)
那麼任務將剛需項目ID和一個getter和setter方法。視圖可以輕鬆訪問可用的項目,項目列表和項目用戶,而無需依賴挖掘模型或進一步的AJAX調用。另外,任務模型不需要任何項目數據。
然而,在全局對象傾銷所有這些數據似乎不錯。
我將可能最終的東西是這樣的:
App.Workspaces
App.Workspaces.get(1)
App.Projects
App.Projects.get(12).get('lists')[0]
App.Projects.get(12).get('users')
要使用這樣的:
var projectId = model.get('project')
var project = App.Projects.get(projectId)
或用getter方法:
var project = model.getProject()
並添加調解員作爲模型級別的依賴關係。
加入大量全局對象這樣增加了相當大的依賴性,可以使測試的難度。假設調解員甚至可以提供項目似乎也是錯誤的。也許它可以使模型,獲取並返回它,如果它不存在。
這裏的任何幫助將是偉大的!我很想知道其他人如何解決這個問題。
我應該提到我已經看過Backbone-Relational和Ligament。它不是我正在尋找的完全嵌套的模型(我認爲),它是確保只爲頁面上的每個實體創建一個模型的一種方式。 1任務 - > 1模型。 – 2012-03-23 05:20:28
chaplin是相當有趣的,真實的,Backbone是低層次的,並且不是一個框架,只是一堆有用的函數。脊柱更加結構化,在我看來,以及Ember.js – mpm 2012-03-23 08:54:50