1

我正在 ExtJs 4 中设计一个表示 Map 数据结构的网格。我有一个用于网格中列的自定义单元格编辑器。我想强制执行密钥在所有密钥中必须是唯一的这一事实。我该怎么做呢?

目前,我正在尝试使用自定义验证器设置一个特殊的文本字段编辑器,通过将其与 dataStore 的值进行比较来检查用户提交的键值是否唯一。不幸的是,这遇到了数据存储不知道什么是“当前”记录,因此在检查重复项时不知道要排除哪个记录的问题。

^令人困惑,对吧?这就是为什么我认为我做错了。

4

1 回答 1

1

这是一个很好的问题,我最终做了你正在做的事情。为了处理当前记录,以便我可以将其从查找中排除,我在vtype验证函数中添加了类似的内容:

unique: function (val, field) {
  // If field has not been changed - don't care about anything else
  if (field.originalValue === undefined || val === field.originalValue) {
    // _trace('unique - original value has not changed'); 
    return true;
  }

  if (!field.isDirty()) {
    // _trace('unique - field is not dirty'); 
    return true;
  }

  // Check you store here...
},
uniqueText: 'Duplicate'

还有一点需要注意 - 如果您将尝试在对话框中使用相同的验证器(与网格行编辑器相反) - 您将需要添加更多检查,因为originalValue不会始终正确设置(至少我必须在 4.0.7 中这样做)我的应用程序)。

于 2012-08-01T12:18:52.830 回答