Javascript 在ExtJs 4网格中强制执行唯一的键值

Javascript 在ExtJs 4网格中强制执行唯一的键值,javascript,extjs,extjs4,datastore,gridpanel,Javascript,Extjs,Extjs4,Datastore,Gridpanel,我正在用ExtJS4设计一个网格,它将表示一个地图数据结构。我有一个用于网格中键列的自定义单元格编辑器。我想强制执行一个事实,即密钥在所有密钥中必须是唯一的。我该怎么做呢 目前,我正在尝试设置一个带有自定义验证器的特殊textfield编辑器,该验证器通过将用户提交的键值与数据存储的值进行比较来检查该键值是否唯一。不幸的是,这会遇到这样的问题:数据存储不知道什么是“当前”记录,因此在检查重复项时不知道要排除哪个记录 ^令人困惑,对吧?这就是为什么我认为我做错了。这是一个很好的问题,我最终做的和你

我正在用ExtJS4设计一个网格,它将表示一个地图数据结构。我有一个用于网格中键列的自定义单元格编辑器。我想强制执行一个事实,即密钥在所有密钥中必须是唯一的。我该怎么做呢

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


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

这是一个很好的问题,我最终做的和你做的差不多。为了处理当前记录,以便将其从查找中排除,我在
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'

还有一个注意事项-如果您尝试在对话框中使用相同的验证器(与grid roweditor相反),您将需要添加更多检查,因为
原始值
不会总是正确设置(至少我必须在我的应用程序的4.0.7中这样做)。

这是一个非常好的问题,最后我做的和你做的差不多。为了处理当前记录,以便将其从查找中排除,我在
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'

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

谢谢您的回答!我以前没见过vtype,我研究过它。但是我找不到
字段是什么。您能解释一下在ExtJS网格的上下文中,传递到
unique:function(val,field)
的是什么吗?非常感谢<代码>字段
将作为编辑器的参考。当您对网格使用roweditor时,它实际上会为每列创建一个Ext.form.field.Textfield。而且
val
显然是您需要检查的值。很酷,谢谢您!我会尝试一下,如果没有人发布另一个解决方案并且它有效,那么我会接受它。谢谢你的回答!我以前没见过vtype,我研究过它。但是我找不到
字段是什么。您能解释一下在ExtJS网格的上下文中,传递到
unique:function(val,field)
的是什么吗?非常感谢<代码>字段
将作为编辑器的参考。当您对网格使用roweditor时,它实际上会为每列创建一个Ext.form.field.Textfield。而且
val
显然是您需要检查的值。很酷,谢谢您!我会尝试一下,如果没有人发布另一个解决方案并且它有效,那么我会接受它