将主干模型属性值设置为另一个模型

Set backbone model attribute value to another model

本文关键字:模型 设置 另一个 属性      更新时间:2023-09-26

我可以设置另一个主干模型作为其属性吗?

我有一个表示基本实体的模型,我想将其重用为其他实体的一部分。但是,看起来 Backbone 的模型属性值只能是字符串。

排序答案:是的,您可以

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

但是,在我看来,这样做不是一个好主意,因为我认为 Backbone 不希望在Model.attributes中找到Objects。我没有尝试,但我认为如果属性的某人是对象,则像Model.toJSON这样的方法不会有正确的行为。

但是话虽如此,我认为在模型中声明引用以下对象的真实属性没有任何问题:

myHouse.door = new Door();

如果我理解正确,您需要做这样的事情:

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();

输出:

ModelOne > method
ModelTwo > method
ModelOne > hello

Backbone.Model设置为另一个模型属性的另一种变体是将其设置为默认值:

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

当您执行someUser.save()时,包含在someUser.attributes.address中的数据将是一个通常的数据对象


我还没有测试过的一件事是AddressModel人口someUser.fetch()