thinkanotherone
thinkanotherone

Reputation: 3145

Set backbone model attribute value to another model

Can I set another backbone model as its attribute ?

I have a model that represents a basic entity, I 'd like to reuse it as part of something else. But, it looks like Backbone's model attribute value can only be String.

Upvotes: 1

Views: 2113

Answers (3)

Paul T. Rawkeen
Paul T. Rawkeen

Reputation: 4114

One more variation of setting Backbone.Model to the attribute of another model is to set it as default value:

var UserModel = Backbone.Model.extend({
    defaults: {
        id: null,
        name: null,
        address: new AddressModel()
    }
});

var someUser = new UserModel();
    someUser.address.set('country', 'ZA');

When you are doing someUser.save() data enclosed in someUser.attributes.address will be a usual data object.


! One thing not yet tested by me is population of AddressModel upon someUser.fetch()

Upvotes: 0

Vitalii Petrychuk
Vitalii Petrychuk

Reputation: 14225

If I understood correctly you need to do something like that:

var ModelOne = Backbone.Model.extend({
    method : function() {
        console.log('ModelOne > method');
    },
    sayHello : function() {
        console.log('ModelOne > hello');
    }
});

var ModelTwo = ModelOne.extend({
    method : function() {
        ModelOne.prototype.method.apply(this);
        console.log('ModelTwo > method');
    }
});

var methodTwo = new ModelTwo();
methodTwo.method();
methodTwo.sayHello();

Output:

ModelOne > method
ModelTwo > method
ModelOne > hello

Upvotes: 0

fguillen
fguillen

Reputation: 38772

Sort answer: yes you can:

myHouse.set({ door: new Door() })

But, in my opinion, is not a good idea to do so, because I don't think Backbone is expecting to found Objects in the Model.attributes. I didn't try but I don't think methods like Model.toJSON are gonna have a correct behavior if someone of the attributes is an Object.

But said so, I don't see any problem to declare real attributes in the Model that make reference to objects like:

myHouse.door = new Door();

Upvotes: 2

Related Questions