在 backbone JS 中调用 model.save 时如何防止验证函数调用
How to prevent validate function call while calling model.save in backbone JS
我有一个 backbone 视图,我在其中调用 model.save 到 create/updated 在表单中提交的日期。在调用保存之前,我明确调用 model.isValid(true) 来验证表单字段,然后我处理表单数据以使其为 API 预期格式做好准备(通过添加或修改其他字段),然后进行调用到 mode.save 函数,该函数再次触发验证函数,其中验证因数据修改而失败。因为我已经明确地调用了 isValid 函数,所以我想在保存期间阻止再次调用。我怎样才能在 backbone 中做到这一点。这是示例代码。
var data = Backbone.Syphon.serialize($(e.currentTarget).closest('form.my_form')[0]));
this.model.set(data);
if(this.model.isValid(true)) {
data['metas'] = this.context.metaData;
data['metas'][0]['locale'] = this.parentObj.model.get('locale');
data['metas'][0]['name'] = data['name'];
delete data['name'];
}
var tempDynAttrs = [];
if(data['dynamicAttributes']){
$.each(data['dynamicAttributes'], function(index,obj) {
if(obj['attributeValue'] !== null && obj['attributeValue'] !== undefined ) {
tempDynAttrs.push({
attributeName: obj['attributeName'],
attributeValue: [obj['attributeValue']],
locale: data['defaultLocale'],
status: 'active'
});
}
});
}
data['dynamicAttributes'] = tempDynAttrs;
this.model.save(data, {
url: this.model.url(),
patch: true,
success : function(model, response) {
$('#headerMessage').html('Data is updated successfully');
},
error : function(model, response) {
$('#headerMessage').html('Error updating data');
}
});
} else {
$('#formPanel').animate({
scrollTop: $('.has-error').first().offset().top-50
}, 100);
return false;
}
尝试在保存选项中传递 {validate:false}
,例如
book.save({author: "Teddy"}, {validate:false});
根据版本变更日志0.9.10:
Model validation is now only enforced by default in Model#save
and no longer enforced by default upon construction or in Model#set
, unless the {validate:true}
option is passed.
所以通过 {validate:false}
应该就可以了。
我有一个 backbone 视图,我在其中调用 model.save 到 create/updated 在表单中提交的日期。在调用保存之前,我明确调用 model.isValid(true) 来验证表单字段,然后我处理表单数据以使其为 API 预期格式做好准备(通过添加或修改其他字段),然后进行调用到 mode.save 函数,该函数再次触发验证函数,其中验证因数据修改而失败。因为我已经明确地调用了 isValid 函数,所以我想在保存期间阻止再次调用。我怎样才能在 backbone 中做到这一点。这是示例代码。
var data = Backbone.Syphon.serialize($(e.currentTarget).closest('form.my_form')[0]));
this.model.set(data);
if(this.model.isValid(true)) {
data['metas'] = this.context.metaData;
data['metas'][0]['locale'] = this.parentObj.model.get('locale');
data['metas'][0]['name'] = data['name'];
delete data['name'];
}
var tempDynAttrs = [];
if(data['dynamicAttributes']){
$.each(data['dynamicAttributes'], function(index,obj) {
if(obj['attributeValue'] !== null && obj['attributeValue'] !== undefined ) {
tempDynAttrs.push({
attributeName: obj['attributeName'],
attributeValue: [obj['attributeValue']],
locale: data['defaultLocale'],
status: 'active'
});
}
});
}
data['dynamicAttributes'] = tempDynAttrs;
this.model.save(data, {
url: this.model.url(),
patch: true,
success : function(model, response) {
$('#headerMessage').html('Data is updated successfully');
},
error : function(model, response) {
$('#headerMessage').html('Error updating data');
}
});
} else {
$('#formPanel').animate({
scrollTop: $('.has-error').first().offset().top-50
}, 100);
return false;
}
尝试在保存选项中传递 {validate:false}
,例如
book.save({author: "Teddy"}, {validate:false});
根据版本变更日志0.9.10:
Model validation is now only enforced by default in
Model#save
and no longer enforced by default upon construction or inModel#set
, unless the{validate:true}
option is passed.
所以通过 {validate:false}
应该就可以了。