javascript - 如何通过对其他表单域进行分组来创建自定义表单域?

标签 javascript web-applications extjs extjs4

我想在 ExtJS 4 中将几个标准表单字段组合成一个自定义表单字段。基本上,我想要一个类别选择器:当您从第一个组合框中选择一个类别时,会出现一个显示其子类别的辅助组合框,依此类推.

我已经为此编写了逻辑并将其全部封装在一个扩展 Ext.form.FieldSet 的自定义组件中。 但是,我想在带有记录的表单中使用这个组件,所以我猜想我需要将它变成一个具有 setValue、getValue 和验证器等功能的字段。我发现 Ext.form.field.Base 提供了所有这些,但我找不到一种方法来和谐地组合这两个组件(一个像 Ext.form.FieldSet 的容器 + 一个像 Ext.form.field.base 的字段) .

有谁知道我能否以及如何完成此任务?

提前致谢!

最佳答案

以下解决方案可能不是最佳解决方案。但是它应该可以工作。

扩展 Ext.form.field.Base。然后在 afterrender 处理程序中创建 Ext.form.FieldSet 并将其附加到字段的 inputEl。然后,当然是覆盖字段的 valueToRawsetRawValue、...

代码如下:

Ext.define('Ext.ux.form.field.MyCoolField', {
    extend:'Ext.form.field.Base',
    requires: ['Ext.util.Format', 'Ext.XTemplate'], 
    fieldSubTpl: [  
        '<div id="{id}" class="{fieldCls}"></div>',
        {
            compiled: true,          
            disableFormats: true     
        }           
    ],

    isFormField: true,
    submitValue: true,
    afterRender: function() {
        this.callParent();

        this.fieldSet = Ext.create('Ext.form.FieldSet', {
            items: [{
              // ... config of the first item

              // The following configs should be set to false. It's important.
              // Otherwise form will assume this items as its fields
              isFormField: false,
              submitValue: false
        });
        this.fieldSet.render(this.inputEl);
    },

    // and here overriding valueToRaw and so on
    // ...
});

关于javascript - 如何通过对其他表单域进行分组来创建自定义表单域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401654/

相关文章:

javascript - 如何将 Angular2 Material 添加到 Angular-CLI 中?

javascript - 使用 ng-view 时 AngularJS 数组不更新

javascript - 延迟脚本和放在页面主体末尾的脚本有什么区别?

javascript - 固定面板 extjs 4.2 的大小

javascript - 如何在面板内滚动?

javascript - Extjs:如何获取表单的值

javascript - 时刻模型中的 getMonth()

javascript - 类型 '() => JQuery<HTMLElement>' 的参数不可分配给类型的参数

web-services - 使用指定的客户端 key 设计 API

eclipse - 无法在 Eclipse 中加载 Maven 项目中的 Widgetsets