如何从商店中的模型中删除validationError?

时间:2017-04-14 04:33:12

标签: javascript backbone.js backbone-relational

我在更新模型时犯了一个错误,模型现在在validationError模型属性中有验证错误。

但即使我再次获取该集合并获得该模型的新数据,该模型的validationError也未存在。

因此在列表视图中,集合长度显示为0.即使它有一个,我也在商店中确认了它。

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

1 个答案:

答案 0 :(得分:0)

处理无效数据

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

  • 使用工具(如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;
},

只有当validationError falsy (默认为null thruty ,只要验证规则返回错误消息字符串或数组)。

if (!model.validationError) return model;

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