在 ExtJs 4 网格中强制执行唯一键值
Posted
技术标签:
【中文标题】在 ExtJs 4 网格中强制执行唯一键值【英文标题】:Enforce unique key values in ExtJs 4 grids 【发布时间】:2012-07-31 22:26:07 【问题描述】:我正在 ExtJs 4 中设计一个网格来表示 Map 数据结构。我有一个用于网格中 key 列的自定义单元格编辑器。我想强制执行 key 在所有键中必须是唯一的这一事实。我该怎么做?
目前我正在尝试使用自定义验证器设置一个特殊的文本字段编辑器,通过将其与数据存储的值进行比较来检查用户提交的 key 值是否唯一。不幸的是,这遇到了数据存储不知道什么是“当前”记录,因此在检查重复项时不知道要排除哪个记录的问题。
^令人困惑,对吧?这就是为什么我认为我做错了。
【问题讨论】:
【参考方案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 中)。
【讨论】:
感谢您的回答!我以前没见过vtype,我调查了一下。但我不知道field
是什么。您能解释一下在 Ext Js 网格的上下文中传递到 unique: function(val,field)
的内容吗?非常感谢!
field
将引用编辑器。当您将 roweditor 用于网格时,它实际上会为每一列创建一个 Ext.form.field.Textfield。 val
显然是您需要检查的值。
酷,谢谢你!我会试一试,如果没有人发布另一个解决方案并且它有效,那么我会接受它以上是关于在 ExtJs 4 网格中强制执行唯一键值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django 模型在 ExtJS 网格中获取外键值而不是键?
IE9 中的 extjs 4 主题化问题,网格栏颜色和按钮不会改变