2016-07-07 64 views
0

我有一个骨干视图,我调用model.save来创建/更新表单中提交的日期。在调用save之前,我显式调用了model.isValid(true)来验证表单字段,然后处理表单数据以使其准备API预期格式(通过添加或修改附加字段),然后调用mode.save函数由于修改后的数据,再次触发验证功能,验证功能失败。因为我已经明确地调用了isValid函数,所以我想在保存期间再次阻止该调用。我怎么能在骨干中做到这一点。这里是示例代码。如何在骨干JS中调用model.save时防止验证函数调用

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; 
} 

回答

1

尝试通过{validate:false}在保存选项,如

book.save({author: "Teddy"}, {validate:false}); 

根据版本更改日志0.9.10

模型验证目前仅在默认情况下强制执行Model#save并且不再在施工时或Model#set中强制执行,除非{validate:true}选项通过。

所以通过{validate:false}应该做的伎俩。