集合中的骨干集合
我正在使用骨干构建我的第一个真正的Web应用程序,我正在努力嵌套资源。
这是我正在使用的json响应的简化版本:
{
"id": 1,
"title": "Test Survey",
"groups": [
{
"id": 1,
"title": "Basic Questions",
"questions": [
{
"id": 1,
"title": "Which is your favorite color?"
},
{
"id": 2,
"title": "Do you have any other hobbies?"
}
]
},
{
"id": 2,
"title": "Working Questions",
"questions": [
{
"id": 3,
"title": "Do you think working exp is very important?"
}
]
}
]
}
基本上是一个Survey对象,它有许多组,每个组都有很多问题。
我似乎无法弄清楚将所有这些数据转化为模型/集合的好方法。
我目前拥有的是:
// Models
var Question = Backbone.Model.extend({});
var Group = Backbone.Model.extend({});
var Survey = Backbone.Model.extend({ url: surveyURL });
// Collections
var GroupsCollection = Backbone.Collection.extend({});
var QuestionsCollection = Backbone.Collection.extend({});
//Views
var SurveyView = Backbone.View.extend({
..
});
var GroupsCollectionView = Backbone.View.extend({
..
});
var QuestionsCollectionView = Backbone.View.extent({
..
});
var survey = new Survey({ groups: new GroupsCollection({model: Group}) });
var groupsView = new GroupsCollectionView({collection: survey.get('groups')});
这似乎适用于在Survey模型中嵌套组,但如何将问题存储在集合中,然后将其分配给Groups集合中的每个模型?
如前所述,我对骨干网相对来说比较陌生,所以如果我要走完全错误的道路,或者有更好的方法来做到这一点,请告诉我。
干杯。
我通常将我的子集合声明为我的对象的属性(我从属性哈希中删除它们:在您的示例中,这意味着引用survey.groups
而不是survey.get('groups')
)并使用model.parse
来填充它们。
使用您的Survey
模型:
var GroupsCollection = Backbone.Collection.extend({
model: Group
});
var Survey = Backbone.Model.extend({
initialize: function(data) {
this.groups = new GroupsCollection();
this.parse(data);
},
parse: function(data) {
if (data.groups) {
this.groups.reset(data.groups);
}
return _.omit(data, 'groups');
}
});
您的Group
类将以类似的方式进行声明。 你会将你的数据传递给构造函数:
var s = new Survey({
"id": 1,
"title": "Test Survey",
"groups": [],
...
});
var g = s.groups.at(0); //first group
var q = g.questions.at(0); //first question in the first group
然后遍历数据以构建整个层次结构。
和一个演示http://jsfiddle.net/nikoshr/947Vf/
上面的回答对我的情况来说有点沉重,导致我回到这个问题。 这可能会有助于其他人搜索。
我创建了四个集合。 他们将被收藏在一个集合中。 集合视图将包含另外四个集合视图,其子视图(普通旧视图)将呈现数据。
当我创建包装集合
new Backbone.Collection([collectionA, collectionB, collectionC, collectionD])
我返回了一个包含四个模型的集合,所有这些模型都是Backbone 模型 。 在这些模型没有包含我的收藏之前,这很好。
这是通过创建包装模型解决的,每个包含我的四个集合中的一个。
var wrapperModelA = new Backbone.Model({ collection: collectionA });
...
var wrapperModelD = new Backbone.Model({ collection: collectionD });
return new Backbone.Collection([wrapperModelA, ... , wrapperModelD]);
这保存了我的集合,并允许我创建一个嵌套的集合结构,而不需要定义新的类。
链接地址: http://www.djcxy.com/p/74711.html上一篇: Backbone collection in collections
下一篇: Why am I getting an UIBarButtonItem customization warning?