初始化 Backbone 网视图失败

hpxqektj  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(141)

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

initialize: function (data) { 
  if (!valid(data)) { 
     // don't initialize and return an object
  }
}
ubof19bj

ubof19bj1#

模型已经有内建的验证机制。您可以先在模型上定义validate函数。
这个方法是未定义的,我们建议你用JavaScript中可以执行的任何自定义验证逻辑覆盖它。默认情况下,save在设置任何属性之前会检查validate,但是你也可以通过传递{validate: true}作为一个选项来告诉set验证新属性。
[...]

var Chapter = Backbone.Model.extend({
  validate: function(attrs, options) {
    if (attrs.end < attrs.start) {
      return "can't end before it starts";
    }
  }
});

然后,您可以使用方便的isValid函数来检查模型是否处于有效状态。

initialize: function (data) { 
  if (!this.isValid(data)) return; // early return
  // normal initialization here
}

initialize的返回值是ignore。如果你想在属性无效时将其改回默认值,你可以使用set来实现。

initialize: function (data) { 
  if (!this.isValid(data)) {
    this.set({ defaultValue: "test" });
    return;
  }
  // normal initialization here
}
ppcbkaq5

ppcbkaq52#

在这种情况下需要重写构造函数

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

请记住:

  • 这样模型可能在 Backbone.js 集合内不起作用
  • 如果您希望支持完整的模型验证流程-请使用Emile答案
  • 最重要的是:* 请在知道自己在做什么的情况下使用 *
1szpjjfi

1szpjjfi3#

Backbone Model将始终在示例化对象时运行任何initialize函数,如果您不希望执行某些操作,请不要将其放在initialize函数上。
您也可以掷回错误并加以行程。
干杯干杯干杯

相关问题