Relational Many To Many
Example for doing Many To Many with relational
by Hristo Hristov
HTML
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.com/backbone/backbone-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone-relational/0.8.5/backbone-relational.min.js"></script>
<section>
<p>To Think about JavaScript code below.</p>
</section>
JavaScript
var models = {}
models.ModelB = Backbone.RelationalModel.extend({
urlRoot: 'someUrl'
});
models.CollectionB = Backbone.Collection.extend({
model: models.ModelB
});
// Join table
models.ABJoin = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasOne,
key: 'b',
relatedModel: models.ModelB,
reverseRelation: {
key: 'abJoins',
includeInJSON: false
}
}
],
toJSON: function () {
return this.get('b').id;
}
});
models.ABJoinCollection = Backbone.Collection.extend({
model: models.ABJoin
});
models.ModelA = Backbone.RelationalModel.extend({
url: 'someUrl',
relations: [
{
type: Backbone.HasMany,
key: 'abJoins',
relatedModel: models.ABJoin,
collectionType: models.ABJoinCollection,
keyDestination: 'bs',
autoFetch: false,
reverseRelation: {
key: 'a',
includeInJSON: true
}
}
],
parse: function (response) {
// plural of 'b'
var bs = response.bs;
if (bs) {
response.abJoins = _.map(bs, function (b) {
return {b: b};
});
delete response.bs;
}
return response;
}
});
models.ACollection = Backbone.Collection.extend({
model: models.ModelA
});
var modelJson = [
{
id : 'a1',
bs : [
{ id : 'b1'},
{ id : 'b2'}
]
},
{
id : 'a2',
bs : [
{ id : 'b2'},
{ id : 'b3'}
]
}
];
var myAs = new models.ACollection(modelJson, {parse:true});
// a1's b attrs
console.log("a1 b models");
var a1 = myAs.at(0);
var joins1 = a1.get('abJoins');
console.log(joins1.at(0).get('b').id);
console.log(joins1.at(1).get('b').id);
// a2's b attrs
console.log("a2 b models");
var a2 =...