我有一个 Backbone.js 模型类。我有一个初始化函数。如果我不想在无效数据上初始化类/对象,我该怎么做?
initialize: function (data) { if (!valid(data)) { // don't initialize and return an object } }
ubof19bj1#
模型已经有内建的验证机制。您可以先在模型上定义validate函数。这个方法是未定义的,我们建议你用JavaScript中可以执行的任何自定义验证逻辑覆盖它。默认情况下,save在设置任何属性之前会检查validate,但是你也可以通过传递{validate: true}作为一个选项来告诉set验证新属性。[...]
validate
save
{validate: true}
var Chapter = Backbone.Model.extend({ validate: function(attrs, options) { if (attrs.end < attrs.start) { return "can't end before it starts"; } } });
然后,您可以使用方便的isValid函数来检查模型是否处于有效状态。
isValid
initialize: function (data) { if (!this.isValid(data)) return; // early return // normal initialization here }
initialize的返回值是ignore。如果你想在属性无效时将其改回默认值,你可以使用set来实现。
initialize
set
initialize: function (data) { if (!this.isValid(data)) { this.set({ defaultValue: "test" }); return; } // normal initialization here }
ppcbkaq52#
在这种情况下需要重写构造函数
var Library = Backbone.Model.extend({ constructor: function (attrs) { if (!valid(attrs)) { return {anything: 'else'}; } Backbone.Model.apply(this, arguments); } });
请记住:
1szpjjfi3#
Backbone Model将始终在示例化对象时运行任何initialize函数,如果您不希望执行某些操作,请不要将其放在initialize函数上。您也可以掷回错误并加以行程。干杯干杯干杯
3条答案
按热度按时间ubof19bj1#
模型已经有内建的验证机制。您可以先在模型上定义
validate
函数。这个方法是未定义的,我们建议你用JavaScript中可以执行的任何自定义验证逻辑覆盖它。默认情况下,
save
在设置任何属性之前会检查validate,但是你也可以通过传递{validate: true}
作为一个选项来告诉set验证新属性。[...]
然后,您可以使用方便的
isValid
函数来检查模型是否处于有效状态。initialize
的返回值是ignore。如果你想在属性无效时将其改回默认值,你可以使用set
来实现。ppcbkaq52#
在这种情况下需要重写构造函数
请记住:
1szpjjfi3#
Backbone Model将始终在示例化对象时运行任何
initialize
函数,如果您不希望执行某些操作,请不要将其放在initialize
函数上。您也可以掷回错误并加以行程。
干杯干杯干杯