初始化骨干视图失败

时间:2018-01-16 21:39:23

标签: javascript backbone.js

我有一个骨干模型类。我有一个初始化函数。如果我不想在无效数据上初始化类/对象,我该怎么办?

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

3 个答案:

答案 0 :(得分:-1)

在这种情况下你需要覆盖构造函数

var Library = Backbone.Model.extend({
  constructor: function (attrs) { 
    if (!valid(attrs)) {
      return {anything: 'else'}; 
    }
    Backbone.Model.apply(this, arguments);
  }
});

请记住:

  • 此类型号可能无法在Backbone集合中使用
  • 如果您想支持完整的模型验证流程 - 请使用Emile answer
  • 最重要的是:请仅在知道自己在做什么时才使用

答案 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函数上。
您也可以抛出错误并处理它 欢呼声。