首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >extjs选取器中的渲染器配置是什么?

extjs选取器中的渲染器配置是什么?
EN

Stack Overflow用户
提问于 2016-01-19 19:33:01
回答 1查看 897关注 0票数 1

我正在使用Extjs-6开发一个web应用程序。我想从Ext.form.field.Picker扩展一个类。我这样做如下:

代码语言:javascript
复制
...
extend: 'Ext.form.field.Picker',
createPicker: function(){
   return new Ext.panel.Panel({
      items: [{
         xtype: 'textfield',
         name: 'text',
         fielLabel: 'text label'
      }, {
         xtype: 'colorfield',
         name: 'color',
         fielLabel: 'color field'
      }, 
      ...
      ]
   });
}
...

我在这个类中的值是一个对象,如下所示:

代码语言:javascript
复制
{
   text: 'value of textfield',
   color: 'value of colorfield'
}

但是当我将这个对象设置为类的值时,它在选取器中显示为[object object]

我该怎么做呢?

让选择器有一个像renderer这样的配置来获取选择器的值,然后返回正确的字符串?

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 19:50:00

除了模板之外,还有更多的东西。下面是文本字段+日期字段的示例选择器实现,只需将其调整为具有colorfield即可。

代码语言:javascript
复制
// component has picker with both textfield and datefield;
// when picker is collapsed, data is displayed as "{text}, {date}"
Ext.define('ColorPicker', {
    extend: 'Ext.form.field.Picker',

    // picker template
    config: {
        popup: {
            lazy: true,
            $value: {
                xtype: 'window',
                closeAction: 'hide',
                referenceHolder: true,
                minWidth: 540,
                minHeight: 60,
                layout: 'form',
                header: false,
                resizable: true,
                items: [
                    {
                        xtype: 'textfield',
                        name: 'text',
                        fielLabel: 'text label',
                        anchor: '100%',
                        reference: 'text'
                    },
                    {
                        xtype: 'datefield',
                        name: 'color',
                        fielLabel: 'color field',
                        anchor: '100%',
                        format: 'd.m.Y',
                        reference: 'date'
                    }
                ],
                fbar: [
                    { text: 'OK', reference: 'okBtn' },
                    { text: 'Cancel', reference: 'cancelBtn' }
                ]
            }
        }
    },
    dateFormat: 'd.m.Y',

    createPicker: function(){
        var me = this,
            popup = me.getPopup();

        // the window will actually be shown and will house the picker
        me.pickerWindow = popup = Ext.create(popup);

        popup.lookupReference('okBtn').on('click', 'onPickerOk', me);
        popup.lookupReference('cancelBtn').on('click', 'onPickerCancel', me);

        popup.on({
            close: 'onPickerCancel',
            scope: me
        });

        me.updateValue(me.getValue());

        return popup;
    },

    // ok picker button handler
    onPickerOk: function () {
        var me = this,
            popup = me.pickerWindow,
            textField = popup.lookupReference('text'),
            dateField = popup.lookupReference('date'),
            value = {
                text: textField.getValue(),
                date: dateField.getValue()
            };

        popup.hide();

        me.setValue(value);
    },

    // cancel picker button handler
    onPickerCancel: function () {
        var me = this,
            popup = me.pickerWindow;

        popup.hide();

        me.updateValue(me.getValue());
    },

    // override set value to support both string ("{text}, {date}")
    // and object ({ text: "{text}", date: "{date}" })
    setValue: function(value) {
        var me = this,
            text,
            date,
            v;

        if (Ext.isObject(value)) {
            value = value.text + ", " + Ext.Date.format(value.date, me.dateFormat);
        }

        me.callParent([ value ]);

        // always update in case opacity changes, even if value doesn't have it
        // to handle "hex6" non-opacity type of format
        me.updateValue(value);
    },

    // update values in picker fields
    updateValue: function (value) {
        var me = this,
            popup = me.pickerWindow,
            textField,
            dateField,
            text = value.text,
            date = value.date;

        if (!popup || !popup.isComponent) {
            return;
        }

        if (Ext.isString(value)) {
            value = value.split(',');
            text = (value[0] || '').trim();
            date = Ext.Date.parse((value[1] || '').trim(), me.dateFormat);
        } else if (Ext.isObject(value)) {
            text = value.text || '';
            date = value.date || '';
        }

        textField = popup.lookupReference('text');
        dateField = popup.lookupReference('date');

        if (!me.syncing) {
            me.syncing = true;

            textField.setValue(text);
            dateField.setValue(date);

            me.syncing = false;
        }
    }
});

小提琴:https://fiddle.sencha.com/#fiddle/14kg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34875702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档