【问题标题】:How to prevent validate function call while calling model.save in backbone JS如何在主干 JS 中调用 model.save 时防止验证函数调用
【发布时间】:2016-07-07 03:58:09
【问题描述】:

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

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

【问题讨论】:

    标签: validation backbone.js


    【解决方案1】:

    尝试在保存选项中传递{validate:false},例如

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

    根据版本0.9.10的变更日志:

    模型验证现在仅在Model#save 中默认强制执行,并且在构造时或Model#set 中不再默认强制执行,除非通过了{validate:true} 选项。

    所以传递{validate:false} 应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多