Skip to content

Instantly share code, notes, and snippets.

@bradharms
Last active December 9, 2015 23:22
Show Gist options
  • Save bradharms/6c8a5466f32ea8c61650 to your computer and use it in GitHub Desktop.
Save bradharms/6c8a5466f32ea8c61650 to your computer and use it in GitHub Desktop.
Test behavior of Backbone and Bookshelf using different kinds of inheritence
var _ = require('lodash');
var Backbone = require('backbone');
var Bookshelf = require('bookshelf');
var Knex = require('knex');
var ModelBaseMixin = {
initialize: function() {
console.log('ModelBaseMixin.initialize()');
this.say();
},
say: function() {
console.log('ModelBaseMixin.say()');
},
sayMore: function() {
console.log('ModelBaseMixin.sayMore()');
},
};
var ArticleBaseMixin = _.assign({}, ModelBaseMixin, {
initialize: function() {
ModelBaseMixin.initialize.apply(this, arguments);
console.log('ArticleBaseMixin.initialize()');
},
say: function() {
ModelBaseMixin.say.apply(this, arguments);
console.log('ArticleBaseMixin.say()');
this.sayMore();
},
});
// ----------------------------------------------------------------------------
console.log('\nConstructing BackboneArticle...');
var BackboneArticle = Backbone.Model.extend(ArticleBaseMixin);
var bba = new BackboneArticle();
console.log('\nFrom bba.say():');
bba.say();
// -----------------------------------------------------------------------------
var db = Bookshelf(
Knex({
client: 'sqlite3',
connection: {
filename: process.cwd() + '/bblb.db',
},
})
);
console.log('\nConstructing BookshelfArticle...');
var BookshelfArticle = db.Model.extend(ArticleBaseMixin);
var bsa = new BookshelfArticle();
console.log('\nFrom bsa.say():');
bsa.say();
// -------
/* Output:
Constructing BackboneArticle...
ModelBaseMixin.initialize()
ModelBaseMixin.say()
ArticleBaseMixin.say()
ModelBaseMixin.sayMore()
ArticleBaseMixin.initialize()
From bba.say():
ModelBaseMixin.say()
ArticleBaseMixin.say()
ModelBaseMixin.sayMore()
Constructing BookshelfArticle...
ModelBaseMixin.initialize()
ModelBaseMixin.say()
ArticleBaseMixin.say()
ModelBaseMixin.sayMore()
ArticleBaseMixin.initialize()
From bsa.say():
ModelBaseMixin.say()
ArticleBaseMixin.say()
ModelBaseMixin.sayMore()
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment