【问题标题】:How to create a custom form field by grouping other form fields?如何通过对其他表单域进行分组来创建自定义表单域?
【发布时间】:2011-09-13 12:11:21
【问题描述】:

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

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

有谁知道我是否以及如何做到这一点?

提前谢谢你!

【问题讨论】:

    标签: javascript web-applications extjs extjs4


    【解决方案1】:

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

    扩展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
        // ...
    });
    

    【讨论】:

    • 谢谢!这就是我最终做的。我不知道为什么,但它有一些渲染问题:即使使用 100% 锚布局,字段集也不会拉伸到容器的全宽。我添加了一个Ext.apply(this, {listeners: {resize: function() {$this.container.doLayout();}}});,它部分解决了问题。骇客骇客。 :) 如果没有其他人提出更好的主意,我会将其标记为已接受。
    【解决方案2】:

    我以不同的方式完成了这项工作,但免责声明:它在 extjs 4.1 中停止工作

    我扩展了 Ext.container.Container,然后添加了 Ext.form.field.Field 作为 mixin。从那里我实现了getValue/setValue。一切都很好,但在 4.1 中突然出现了各种问题。

    【讨论】:

    • 你能把你的代码贴在某个地方吗?这样也许我们都可以得到这个工作
    • 恐怕我不能,因为我不再与那家公司合作,也没有代码了!
    • 我可以尝试在某个时候重现它,但我有一段时间没有使用 EXTjs。老实说,它并不是很复杂——基本上如上所述,我做的唯一“棘手”的事情是将 Form.field.Field 添加为 mixin,因此一旦 getValue ,“聚合”字段的行为就可以像普通的单个字段一样和 setValue 已实施。从那里处理包含的子字段是一个相对简单的问题......我希望这会有所帮助!但我希望有更好的方法,我一直没有找到。
    • 感谢您的描述 :) 我找到了您刚才在此处描述的解决方案:stackoverflow.com/a/17059073/965722 我想创建具有多个控件的自定义表单字段。我首先找到了您的帖子,然后感谢您的描述,我找到了附加的链接:)
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2012-12-21
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多