我有一个骨干模型类。我有一个初始化函数。如果我不想在无效数据上初始化类/对象,我该怎么办?
class Outer(object):
def __init__(self):
class Inner(object):
def compare(self, other):
print('Comparison Result: {}'.format(isinstance(other, self.__class__)))
self.Inner = Inner
def factory(self):
return self.Inner()
f = Outer()
a = f.factory()
b = f.factory()
print(a.compare(b)) # True
g = Outer() # create another instance of the outer class
c = g.factory()
print(a.compare(c)) # False
答案 0 :(得分:-1)
在这种情况下你需要覆盖构造函数
var Library = Backbone.Model.extend({
constructor: function (attrs) {
if (!valid(attrs)) {
return {anything: 'else'};
}
Backbone.Model.apply(this, arguments);
}
});
请记住:
答案 1 :(得分:-1)
模型已经内置了验证机制。您可以先在模型上定义validate
function。
此方法未定义,我们鼓励您覆盖它 使用任何可以执行的自定义验证逻辑 JavaScript的。默认情况下,
save
会在设置之前检查验证 属性,但您也可以告诉set验证新属性 传递{validate: true}
作为选项。[...]
var Chapter = Backbone.Model.extend({ validate: function(attrs, options) { if (attrs.end < attrs.start) { return "can't end before it starts"; } } });
然后,您可以使用方便的isValid
function来检查模型是否处于有效状态。
initialize: function (data) {
if (!this.isValid(data)) return; // early return
// normal initialization here
}
忽略initialize
的返回值。如果您想在无效时将属性更改回默认值,则可以使用set
执行此操作。
initialize: function (data) {
if (!this.isValid(data)) {
this.set({ defaultValue: "test" });
return;
}
// normal initialization here
}
答案 2 :(得分:-1)
Backbone Model将在实例化对象时始终运行任何initialize
函数,如果您不想执行某些操作,请不要将其放在initialize
函数上。
您也可以抛出错误并处理它
欢呼声。