Skip to content

Instantly share code, notes, and snippets.

@max-power
Created August 23, 2012 20:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save max-power/3440987 to your computer and use it in GitHub Desktop.
Save max-power/3440987 to your computer and use it in GitHub Desktop.
Backbone MongoModel: embbedded models and collections.
Backbone.MongoModel = Backbone.Model.extend({
idAttribute: '_id',
embedded: {},
parse: function(i){
_.each(this.embedded, function(klass,k){ i[k] = new klass(i[k], {parse: true}) })
return i
},
toJSON: function(){
return _.reduce(this.attributes, function(o,v,k){ o[k] = v && v.toJSON ? v.toJSON() : v; return o }, {})
}
})
var User = Backbone.MongoModel.extend({
embedded: {
auth_tokens: Backbone.Collection,
profile: Backbone.Model
}
})
var data = {
_id: '123',
email: 'bruce@wayne-enterprises.com',
profile: {
firstname: 'Bruce',
lastname: 'Wayne'
},
auth_tokens: [
{provider: 'github', uid: '1234'},
{provider: 'twitter', uid: '5678'}
]
}
var user = new User(data, {parse: true})
user.get('profile').get('firstname') // Bruce
user.get('auth_tokens').pluck('provider') // ["github", "twitter"]
user.toJSON()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment