gpt4 book ai didi

inheritance - Backbone .js 模型继承

转载 作者:行者123 更新时间:2023-12-01 07:27:48 25 4
gpt4 key购买 nike

我有一个 Backbone 模型

var app = app || {};

app.Era = Backbone.Model.extend({

defaults: {
from: Number.NEGATIVE_INFINITY,
until: Number.POSITIVE_INFINITY,
stash: {
from: null,
until: null
},
_enabled: true
},

toggle: function(){
if(this.get('_enabled')){
this.disable();
}else{
this.enable();
}

this.save();
},

enable: function(){
this.from = this.stash.from;
this.until = this.stash.until;

this.stash.from = null; // strictly speaking unnecssary
this.stash.until = null;

this._enabled = true;
},

disable: function(){
this.stash.from = this.from;
this.stash.until = this.until;

this.from = null;
this.until = null;

this._enabled = false;
},

enabled: function(){
return this._enabled;
},

});

我试图像这样扩展
Name = app.Era.extend({ defaults: { value: '' } });

这似乎有效,我在控制台中没有错误。
我什至可以实例化一个新名称,但是当我尝试实例化一个新名称时,我收到一条错误消息:
> era = new app.Era()
child
> era.get('from')
-Infinity
> Name = app.Era.extend({ defaults: { value: '' } })
function (){ return parent.apply(this, arguments); }
> name = new Name()
child
> name.get('value')
TypeError: Object [object Object] has no method 'get'

我将不胜感激一些反馈!

最佳答案

编辑:这很可能是一个不错的答案,但不是针对这个特定问题...正确答案由 Bryan Clark 提供。无论如何,我都会把它留在这里,因为虽然我误解了你的问题,但它描述了一个常见问题的解决方案,无论如何可能会对你有所帮助。

Backbone 继承通过修改构造函数的原型(prototype)来工作。当您扩展模型并重新定义 defaults属性,它不会合并 Name.defaults属性(property)给 Era.defaults ,但只是隐藏它。

考虑一个简化的例子:

var Era = Backbone.Model.extend({ name: "Era" });
var Name = Era.extend({ name: "Name" });
console.log(new Name().name); //-> "name", makes sense, right?

合并派生类 defaults对于父类(super class),您可以利用 Model.defaults can be defined as a function以及对象文字。
var Era = Backbone.Model.extend({ 
defaults: {
//..
}
});

var Name = Era.extend({
//define defaults as a function
defaults: function() {
//copy the superclass defaults into a new object, and
//then extend that with the new defaults
return _.extend({}, Era.prototype.defaults, {
value:''
});
}
});

关于inheritance - Backbone .js 模型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14614582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com