Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending the defaults of a Model superclass in Backbone.js

I would like to pose this as a question to this answer but I can't seem to do so, I apologize.

Extending the defaults for the subclass are reflected in the superclass. This seems to defeat the purpose and I'm more apt to explicitly list the superclass' defaults in the subclass to get the structure I'm looking for.

var Inventory = Backbone.Model.extend({     defaults: {         cat: 3,         dog: 5     } });  var ExtendedInventory = Inventory.extend({ });  _.extend(ExtendedInventory.prototype.defaults, {rabbit: 25});  var i = new Inventory(); var ei = new ExtendedInventory(); console.log(i.attributes); console.log(ei.attributes); 

This outputs:

{cat: 3, dog: 5, rabbit: 25} {cat: 3, dog: 5, rabbit: 25} 

Not what I (nor, I assume, the op) want:

{cat: 3, dog: 5} {cat: 3, dog: 5, rabbit: 25} 
like image 757
mcdoh Avatar asked Jul 01 '11 14:07

mcdoh


People also ask

Can we set default values for model in Backbone JS?

defaults() The Backbone. js defaults model is used to set a default value to a model. It ensures that if a user doesn't specify any data, the model would not fall with empty property.

What is backbone view extend?

The Backbone. js view extend method is used to extend the Backbone. js view class to create a custom view. Syntax: Backbone.


1 Answers

The problem is that Inventory.prototype.defaults and Extended.prototype.defaults has the same reference, because you have not override the reference.

So you can do this in 2 ways, maybe more but i only found this 2:

Edit: The first example is incorrect (see comments); please refer to the second.

var ExtendedInventory = Inventory.extend({     defaults: {         rabit:25     } });  _.extend(ExtendedInventory.prototype.defaults, Inventory.prototype.defaults); 

or

var ExtendedInventory = Inventory.extend({     defaults: _.extend({},Inventory.prototype.defaults,          {rabit:25}     ) }); 

I think the first looks cleaner.

like image 142
JCorcuera Avatar answered Sep 22 '22 07:09

JCorcuera