像@mu_is_too_short評論,骨幹關係可能是一個你有興趣尋找到。通過Backbone-relational,您的模型和子模型集合會自動創建,並且可以在父子關係中管理事件。
我只是給你一些示例代碼,讓你可以品嚐它。 您示例代碼的一部分可能看起來像這樣。
用戶有很多活動:
User = Backbone.RelationalModel.extend({
relations: [
type: Backbone.HasMany, // Type of relationship
key: 'events', // How we reference the sub-models in collection
relatedModel: 'Event', // The sub-model type
collectionType: 'EventCollection', // The sub-model collection
reverseRelation: {
key: 'belongsToUser' // Key we use to refer to the parent
}
],
// Other Backbone.Model properties and functions
});
當您創建一個骨幹關係模型,它會自動創建您指定的「鑰匙」後,命名爲您子模型的集合。因此,您擁有的每個用戶都將擁有自己的相關活動收集整理。
基本上,當您創建或獲取用戶時,您會爲其提供所需的相關模型的引用。因此,例如,您的用戶id = 1可能需要事件5,7和11.(我只使用ID)。只要這些引用是以數組形式定義的,那麼您可以使用Relational的fetchRelated方法來延遲加載它們。
myUser = new User();
myUser.set({
name: 'RayMysterio',
age: '26',
events: [5, 7, 11] // Or this might just come with the User object from your server
});
myUser.fetchRelated('events');
// This will go fetch the related events for this user model from the URL you designate.
myUser.get('events');
// The collection of events are treated like an attribute of the User model.
myUser.get('events').find(function(eventModel){
return // some find condition - or whatever you want to do on that collection
});
您可能想要將某些偵聽器綁定到子模型。
myUser.bind('add:events', function(model, collection) {
// Whatever code you want to happen when new models are added to the user events coll
});
等等,等等
這是生產一對一,一對多,和逆關係的一個很好的方式。這非常關鍵。定義模型之間的關係並創建模型時。
E.g.您創建一個用戶模型的新實例。
骨幹關係自動創建反向鏈接(事件模型有一個由反向關係鍵'belongsToUser'定義的屬性(或者你命名的任何東西),這使得它很方便地在模型/模型的層次結構。
根據您的需求關係這似乎是一個不錯的選擇。
如果你想多對多的,有(使用中級車型),那麼這是一種迂迴的方式,但我發現Paul-Uithol一直在更新Backbone-Relational一段時間,新功能也不斷增加。起初,學習曲線對我來說有點困難,但一旦你開始了習慣它它是非常方便的。
注意:爲了強調,Mosselman建議Require.js,我也非常同意這一點。它使我的代碼更易於管理。您可以修改(包裝)骨幹關係代碼,使其符合AMD標準,並且可以在需求中完美工作。
UPDATE:骨幹關係現在支持2014年4月1日,作爲require.js發佈0.8.8的 - 感謝肯尼斯
是否有可能通過一個事件模型,事件關聯到用戶? 'myUser.set('events',[myEvent1,myEvent2,myEvent3]);'那樣的東西?或者你是否必須通過相關的模型ID來引用關係? –
自2014年4月1日起,@orangewarp backbone-relational現在支持自版本0.8.8開始的require.js。請參閱http://backbonerelational.org/#change-log – Kenneth