如何创建自定义ExtJS表单字段组件?
|
我想使用其中的其他ExtJS组件(例如TreePanel)创建自定义ExtJS表单字段组件。我如何最轻松地做到这一点?
我已经阅读过Ext.form.field.Base的文档,但是我不想通过“ 0”来定义字段主体。我只想编写创建ExtJS组件的代码,也许还要编写一些获取和设置值的代码。
更新:总结目的如下:
此新组件应适合
将GUI作为字段。应该有
标签和相同的对齐方式(标签,
锚)其他字段,无需
进一步的黑客攻击。
可能,我有
写一些getValue,setValue
逻辑。我宁愿将其嵌入到此组件中,而不是制作单独的代码,该代码将内容复制到我也必须管理的其他隐藏形式字段中。
没有找到相关结果
已邀请:
9 个回复
校勒魏寡
mixin。此混合为表单字段的逻辑行为和状态提供了一个通用接口,包括: 字段值的Getter和Setter方法 跟踪价值和有效性变化的事件和方法 触发验证的方法 这可用于组合多个字段并使它们充当一个字段。对于总的自定义字段类型,我建议扩展
这是我上面提到的示例。即使对于像date对象这样的东西,我们都需要格式化getter和setter中的数据,应该做到这一点很容易。
土投
方法中创建子对象(而不是在渲染时)。这是因为外部代码可以合理地期望组件的所有相关对象在``4''之后实例化(例如向其添加侦听器)。 此外,您可以对自己好一点,并在调用super方法之前创建孩子。如果您是在super方法之后创建子级的,则可能会在尚未实例化该子级时调用该字段的
方法(请参见下面的内容)。
如您所见,我正在创建一个组件,这是大多数情况下所需的组件。但是,您也可以想像一下并组成多个子组件。在这种情况下,我认为最好尽快返回知名区域:也就是说,创建一个容器作为子组件,并在其中进行组装。 渲染图 然后是渲染问题。起初,我考虑过使用“ 0”来渲染容器div,并让子组件在其中进行渲染。但是,在这种情况下,我们不需要模板功能,因此我们也可以使用
方法完全绕开它。 我探索了Ext中的其他组件,以了解它们如何管理子组件的呈现。我在BoundList及其分页工具栏中找到了一个很好的示例(请参见代码)。因此,为了获得子组件的标记,我们可以结合使用“ 10”和子组件的“ 11”方法。 因此,这是我们领域的ѭ9的实现:
现在,这还不够。 BoundList的代码使我们了解到,组件渲染中还有另一个重要部分:调用子组件的
方法。幸运的是,我们的自定义字段将在需要完成时调用它自己的
方法。
调整大小 现在,我们的孩子将在正确的位置被渲染,但是将不遵守其父字段的大小。在表单域的情况下,这尤其令人讨厌,因为这意味着它将不遵守锚点布局。 这很容易解决,我们只需要在调整父字段的大小时调整子项的大小。从我的经验来看,这是自Ext3以来的极大改进。在这里,我们只需要不要忘记标签的额外空间:
处理价值 当然,这部分将取决于您的子组件以及您要创建的字段。而且,从现在开始,只需要定期使用子组件即可,因此我不会对此部分进行过多的介绍。 最低要求,您还需要实现字段的
和
方法。这将使表单的“ 20”方法生效,并且足以从表单中加载/更新记录。 要进行验证,必须实现
。为了完善这一方面,您可能需要添加一些CSS规则以直观地表示字段的无效状态。 然后,如果您希望您的字段以将以实际形式提交的形式使用(而不是AJAX请求),则需要
来返回可以转换为字符串而不会造成损坏的值。 除此之外,据我所知,您不必担心
引入的概念或原始值,因为它仅用于处理实际输入元素中值的表示形式。使用我们的Ext组件作为输入,我们就走了这条路! 大事记 您的最后一项工作是为您的字段实施事件。您可能会希望触发
的三个事件,即
,
和
。 同样,实现将非常针对您所使用的子组件,并且说实话,我没有对此方面进行过多探讨。因此,我会让您自己进行布线。 但是我的初步结论是,只要(1)必要时调用
,并且(2)
实现正在与您字段的值格式配合使用,ѭ1便会为您提供所有繁重的工作。 示例:TODO列表字段 最后,这是一个完整的代码示例,使用网格表示TODO列表字段。 您可以在jsFiddle上看到它,我试图在其中显示该字段的行为有序。
埠仙俊
不仅是现场容器,而且是完全成熟的组件容器,因此有一个简单的解决方案。 您所需要做的就是扩展
,覆盖
以添加子组件,并实现
,
和适用于您的值数据类型的验证方法。 这是一个网格的示例,其值是名称/值对对象的列表:
藐刚
(例如在配置中使用
) 覆盖
和
以与您手动渲染的组件通信 如果表单的布局发生变化,您可能需要在
侦听器中手动调整大小 不要忘记清理用you45ѭ方法创建的任何组件! 我迫不及待想将我们的代码库切换到ExtJS 4,在这里,这些事情很容易。 祝好运!
渴翅吮斡撤
/ext/src/form/field/Base.js文件提供了可以覆盖的所有配置和功能的名称。
抢垢洛韧
您只需将xtype设置为小部件名称即可使用表单中的字段:
马口
芳菱挨啡
舞备联