1

我正在尝试开发一个组合框,该组合框允许用户输入要查找的值,如果列表中缺少它,它会被虚拟化为新值(我曾考虑将图像留给该字段​​),此外还会导致字段绑定到分配给它的模型的另一个属性。

此外,用户应该能够清除组合值。

我从使用这个人提供的类开始,并使用所需的设置对其进行了扩展。我设法防止了导致“x”触发器连续隐藏的问题,但我无法管理用户输入 - 选择 - 设置 - 清除(按表单设置值)之间的区别

这是我到目前为止的一个片段

Ext.define('Ext.ux.form.field.InputCombo', {
    extend: 'Ext.form.field.ComboBox',
    alias: 'widget.inputcombo',

    trigger2Cls: 'x-form-clear-trigger',

    newRecordFieldname: null, // the name if this value is new
    originName: null, 

    initComponent: function () {
        var me = this;

        me.addEvents(
            /**
            * @event beforeclear
            * @param {Combo} Combo The combo that triggered the event
            */
            'beforeclear',
            /**
            * @event beforeclear
            * @param {Combo} Combo The combo that triggered the event
            */
            'clear'
        );

        me.callParent(arguments);

        me.on('specialkey', this.onSpecialKeyDown, me);
        me.on('afterrender', function () { 
            me.onShowClearTrigger(false); 
        }, me);

        this.on('change', function() {
            this.createdRecord(this);
        });
        this.on('select', function() {
            this.onSetExisting(this);
        });
    },

    createdRecord: function(ref) {
        ref.newRecord = true;
        ref.selectedRecord = false;
        ref.originName = ref.name;
        ref.name = ref.newRecordFieldname;
        ref.style = 'background:url(../resources/themes/images/default/dd/drop-add.gif) no-repeat left center;'; // does not work
    },

    setExisting: function(ref) {
        ref.newRecord = false;
        ref.selectedRecord = true;
        ref.style = '';
        ref.name = ref.originName;
    },

    /**
        * @private onSpecialKeyDown
        * eventhandler for special keys
        */
    onSpecialKeyDown: function (obj, e, opt) {
        if ( e.getKey() == e.ESC ) {
            this.clear();
        }
    },

    onShowClearTrigger: function (show) {
        var me = this;

        if (show) {
            me.triggerEl.each(function (el, c, i) {
                if (i === 1) {
                    el.setWidth(el.originWidth, false);
                    el.setVisible(true);
                    me.active = true;
                }
            });
        } else {
            me.triggerEl.each(function (el, c, i) {
                if (i === 1) {
                    el.originWidth = el.getWidth();
                    if (el.originWidth !== 0) { // prevent double hide
                        el.setWidth(0, false);
                        el.setVisible(false);
                        me.active = false;
                    }
                }
            });
        }
        me.updateLayout();
    },

    /* lines remoced. see linked answer */
});

我没有设法开始工作(以及我需要帮助的地方)是显示新记录的图像,并且无论我是否首先输入内容并清除或设置值,该字段的行为方式相同,选择一个值等等。通过知道该领域的行为安静不同或根本不起作用。

此外,它应该与即将发布的 4.2 版本兼容。不知道这是否重要。

任何帮助表示赞赏!

4

0 回答 0