我正在研究我的第一个Backbone.js应用程序并遇到了一些奇怪的行为,我担心这可能表明我的设计存在问题。我的数据如下:
Syllabus
Dance
Figure
Figure
Figure
Dance
Figure
Figure
etc.
我创建了这个模型来代表它:
$.syllabus.Syllabus = Backbone.RelationalModel.extend({
urlRoot: '/api/syllabus',
idAttribute: 'id',
relations: [{
type: Backbone.HasMany,
key: 'danceAssignments',
relatedModel: '$.syllabus.DanceAssignment',
collectionType: '$.syllabus.DanceAssignmentCollection',
reverseRelation: {
key: 'syllabus',
includeInJSON: 'id'
}
}]
});
$.syllabus.DanceAssignment = Backbone.RelationalModel.extend({
urlRoot: '/api/danceassignments',
idAttribute: 'id',
relations: [{
type: Backbone.HasMany,
key: 'figureAssignments',
relatedModel: '$.syllabus.FigureAssignment',
collectionType: '$.syllabus.FigureAssignmentCollection',
reverseRelation: {
key: 'danceAssignment',
includeInJSON: 'id'
}
}],
});
$.syllabus.DanceAssignmentCollection = Backbone.Collection.extend({
model: $.syllabus.DanceAssignment,
urlRoot: '/api/danceassignments',
comparator: function(danceAssignment) {
return danceAssignment.get('index');
},
});
$.syllabus.FigureAssignment = Backbone.RelationalModel.extend({
urlRoot: '/api/figureassignments',
idAttribute: 'id'
});
$.syllabus.FigureAssignmentCollection = Backbone.Collection.extend({
model: $.syllabus.FigureAssignment,
url: '/api/figureassignments',
comparator: function(figureAssignment) {
return figureAssignment.get('index');
},
});
当我更改其中一个成员的索引属性时,FigureAssignmentCollection会自动排序,但是当没有明确告诉它时,它不会对DanceAssignmentCollection进行排序。调用比较器,但如果我在排序后打印出集合的内容,它们的顺序错误,界面会使它们无序。
有什么想法吗?
答案 0 :(得分:0)
我找到了解决方案。我的观点是将danceAssignments集合渲染为SyllabusView的一部分。一旦我添加了一个带有集合的DanceListView作为其数据,并让它渲染DanceViews而不是SyllabusView,它就会使舞蹈开始正确排序,并且其他一些非常奇怪的行为也会得到解决。