2013-06-26 241 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")); 

这是工作很适合我...在我的情况