2013-06-26 232 views
1

我學習Backbone.js並嘗試開發改造使用Backbong.js項目。由於該項目已經有API,並在不同的平臺,iphone應用程序,ororid應用程序和網絡中使用。可能在集合中有子集合?

我的問題是,有一個API返回如下

{ 
    success: true, 
    response: { 
     posts: [{...post data...}, {...post data...}, {...post data...}], 
     users: [{...user data...}, {...user data...}], 
     categories: [{...category data...}, {...category data...}] 
    } 
} 

爲骨幹文檔

一個Collection可以包含很多車型

通常的設計是

// Post Model 
var PostModel = Backbone.Model.extend({ 
    ... 
}) 

// User Model 
var UserModel = Backbone.Model.extend({ 
    ... 
}) 

// Category Model 
var UserModel = Backbone.Model.extend({ 
    ... 
}) 

var PostListCollection = Backbone.Collection.extend({ 
    model: PostModel 
}) 

所以...我怎麼能把這3種類型的「對象」 s「在收藏中?由於

回答

2

不確定爲什麼你要一個集合,是不是一個單一的集合。聽起來像(如果這是錯誤的,請糾正我),你需要一種從API中獲取數據並將它轉換爲三個集合的簡潔方式。

您可以創建一個從你的API,實現自定義功能parse內它創建三個集合取模型。 當然,你要定義UserCollectionPostCollectionCategoryCollection提前。

ApplicationModel = Backbone.Model.extend({ 
    url: '/apiUrl/', 
    parse: function(data) 
    { 
     var result = {}; 
     result.users = new UserCollection(data.users); 
     result.posts= new PostCollection(data.posts); 
     result.categories = new CategoryCollection(data.categories); 
     return result; 
    } 
}); 
+0

如何,如果我要查詢該下一頁的主要收藏? – Cauliturtle

+0

你的API現在如何支持分頁? – damienc88

+0

請注意,無論何時ApplicationModel獲取,無論是否爲新頁面或否則,都會調用parse。 – damienc88

2

你可以有包含集合

var ResultModel = Backbone.Model.extend({ 
    default: { 
     Users: [], 
     Posts: [], 
     Categories: [] 
    } 
}); 

然後實現用常規方法收集的模型。

所以,當你試圖讓孩子集合...

var result = new ResultModel("your result JSON object"); 
var users = new UserCollection(result.get("Users")); 
var posts = new PostCollection(result.get("Posts")); 
var categories = new CategoryCollection(result.get("Category")); 

這是工作很適合我...在我的情況