私は最初の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は、そのメンバーの1つのインデックスプロパティを変更すると自動的に並べ替えられますが、DanceAssignmentCollectionは変更されません。また、明示的に指示した場合も並べ替えられません。コンパレータが呼び出されますが、並べ替え後にコレクションの内容を出力すると、順序が間違っており、インターフェイスによって順序が狂ってしまいます。
何かご意見は?