【问题标题】:How to remove validationError from the model in store?如何从商店中的模型中删除validationError?
【发布时间】:2017-04-14 04:33:11
【问题描述】:

我在更新模型时出错,现在模型的 validationError 模型属性中有验证错误。

但即使我再次获取集合并获得模型的新数据,模型的 validationError 也没有在商店中消失。

所以在列表视图中,集合长度显示为0。即使它有一个,我也确认了它。

如何在获取集合时删除模型上的validationError

【问题讨论】:

  • 如果出现验证错误,您是如何更新模型的?我认为验证错误会拒绝更改?

标签: javascript backbone.js backbone-relational


【解决方案1】:

处理无效数据

如果数据以无效状态存储在数据库中,您可以:

  • 使用工具(如 MySQL Workbench 等)从服务器端手动修复
  • 在发送响应之前在后端动态确保数据有效
  • 在您的 Backbone 模型中创建一个 parse 函数,它可以处理您现在的情况

一个简单的解析函数可能如下所示:

var MyModel = Backbone.Model.extend({
  /**
   * Called with the raw response data
   */
  parse: function(data, options) {
    // fix the problem within the data object.
    if (_.has(data, 'myAttribute')) {
      data.myAttribute = /* correction here */
    }
    // return the fixed data object
    return data;
  }
});

为什么集合长度为零?

这是因为集合将接收到的数据(本地作为参数或在获取之后)发送到其private _prepareModel method,从而确保数据是有效的主干模型。

_prepareModel: function(attrs, options) {
  if (this._isModel(attrs)) {
    if (!attrs.collection) attrs.collection = this;
    return attrs;
  }
  options = options ? _.clone(options) : {};
  options.collection = this;
  var model = new this.model(attrs, options);
  if (!model.validationError) return model;
  this.trigger('invalid', this, model.validationError, options);
  return false;
},

仅当 validationErrorfalsy 时才返回模型(默认为 nullthruty 每当验证规则返回错误消息字符串或数组时)。

if (!model.validationError) return model;

否则,它返回 false 并且不将模型添加到集合中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多