集合中的主干集合
Backbone collection in collections
我正在使用主干构建我的第一个真正的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?"
}
]
}
]
}
基本上有一个调查对象,它有很多组,每个组都有很多问题。
我似乎找不到将所有这些数据放入模型/集合中的好方法。
我目前拥有的是:
// 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.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])
我收到了一个包含四个模型的集合,所有这些模型都是骨干模型。这很好,直到这些模型不包含我的收藏。
这是通过创建包装模型来解决的,每个模型都包含我的四个集合中的一个。
var wrapperModelA = new Backbone.Model({ collection: collectionA });
...
var wrapperModelD = new Backbone.Model({ collection: collectionD });
return new Backbone.Collection([wrapperModelA, ... , wrapperModelD]);
这保留了我的集合,并允许我在不定义新类的情况下创建嵌套集合结构。
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Meteor-将选定窗体中的对象添加到集合中
- 主干集合重置和解析
- 使用数据上的角度更改设置集合的第一个元素的动画
- 为集合分配大量的模型弹药
- 如何使用backbone.js从集合中获取模型名称
- Lodash从集合创建集合
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 如何合并不同集合的游标并按日期排序
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 使用它更新集合中的嵌套数组's索引
- 主干-从模板中迭代的集合中获取特定的模型
- 微风得到的是实体而不是对象的集合
- Meteor:插入集合后如何执行JS
- 如何使用javascript var引用Mongo DB集合's字段
- MongoDB-通过比较集合和对象的数组来返回现有字段的数组
- 如何组织用户系统的Mongo集合
- 在Meteor中插入集合时出错
- Meteor:Tracker.autorun/observerChanges&集合未按预期工作
- 使用Undercore创建对象集合