如何在Backbone中组合两个(或更多)基本模型?

时间:2014-02-04 11:21:20

标签: javascript backbone.js

我有一个基本模型,用于定义URL属性的行为。

我还有一个单独的基础模型,它将Backbone模型与Knockout集成。

BaseModel = Backbone.Model.extend({
    url: function () {
        // some custom stuff
    }
});

KoModel = Backbone.Model.extend({
    viewModel: {},
    initialize: function (options) {
        Backbone.Model.prototype.initialize.call(this, options);
        // sets up the view model
        // listens to changes to update the view model when the model changes, etc.
    }
});

我现在需要创建一个具有两个基础功能的模型。

我试过_.mixin

_.mixin(KoModel, BaseModel);

SomeModel = KoModel.extend({defaults: {foo: 'bar'}});

我试过extend

SomeModel = KoModel.extend(BaseModel, {defaults: {foo: 'bar'}});

这些尝试或其他一些类似的排列都没有起作用。

我也尝试使用prototype来定义基本模型,如下所示:

var KoModel = Backbone.Model.extend();

KoModel.prototype.viewModel = {};

KoModel.prototype.initialize = function (options) {
    Backbone.Model.prototype.initialize.call(this, options);
    // etc.
};

如何让新模型继承这两个基础?

2 个答案:

答案 0 :(得分:1)

我发现如果我使用原型扩展而不是它可以工作:

var model = BaseModel.extend(KoModel.prototype);

model.extend({defaults: {foo: 'bar'}});

答案 1 :(得分:0)

您可以像这样创建“继承树”:

BaseModel = Backbone.Model.extend({
        url: function () {
            // some custom stuff
        }
    });

KoModel = BaseModel.extend({
    viewModel: {},
    initialize: function (options) {
        Backbone.Model.prototype.initialize.call(this, options);
        // sets up the view model
        // listens to changes to update the view model when the model changes, etc.
    }
});
SomeModel = KoModel.extend({defaults: {foo: 'bar'}});