3

我正在尝试在 extjs 3.4 的组合框中的选项之间添加一条线。我可以添加该行,但无法使用远程位置的数据填充该行。(如果我删除修改后的 tpl 选项,它会填充)。

这是我的代码。我只需要在“组”字段之间添加一条线,所以说我有 3 个不同长度的不同字段,我需要将它们分开。

我刚开始学习模板和 api 和谷歌搜索并没有太大帮助,所以在询问的时候。感谢人们提供的任何指导。

此外,其中一些代码正在尝试使用 api 或其他论坛,但没有成功。

var recipientStore = new Ext.data.Store ({
        autoload: false,
        url: '../../../messaging/inc/action.php?list=to_options',
        reader: new Ext.data.JsonReader ({
            root: 'to_options',
            id: 'id',
            fields: ['id', 'name', 'group']
        })
    });

    var setRecipient = new Ext.form.ComboBox ({
        fieldLabel: 'To',
        store: recipientStore,
        mode: 'local',
        valueField: 'id',
        displayField: 'name',
        editable: false,
        width: 150,
        triggerAction: 'all',
        value: 'group',
        tpl: '<tpl for = "."><div ext:gtip="{value}" class="x-combo-list-item">{value}</div><tpl if = "xindex == 2"><hr /></tpl></tpl>'
    });
4

3 回答 3

5

user1637759 的回答中记下来,我想出了以下几点:

Ext.define('common.field.GroupingComboBox', {

    extend: 'Ext.form.field.ComboBox',
    alias: 'widget.common.field.GroupingComboBox',

    constructor: function (args) {
        var me = this,
            groupField = args.groupField || "group",
            groupDisplayField = args.groupDisplayField || groupField,
            displayField = args.displayField || "name";

        args.tpl = new Ext.XTemplate(
            '<tpl for=".">',
            '<tpl if="this.' + groupField + ' != values.' + groupField + '">',
            '<tpl exec="this.' + groupField + ' = values.' + groupField + '"></tpl>',
            '<div class="x-panel-header-default x-panel-header-text-container x-panel-header-text x-panel-header-text-default" title="{' + groupDisplayField + '}">{' + groupDisplayField + '}</div>',
            '</tpl>',
            '<div class="x-boundlist-item">{' + displayField + '}</div>',
            '</tpl>'
        );

        me.callParent(arguments);
    }
});

大致看起来像这样

ExtJS 分组组合框

虽然这不提供潜水线,但分组有助于将不同的部分分开,我相信这可能会更好。

警告:我使用的是 ExtJS 4,我不能确定我的解决方案的任何部分是否会在 ExtJS 3 中失败。

于 2013-03-14T20:16:52.300 回答
3

我让它以正确的方式使用模板。

下面是正确的代码:

var recipientStore = new Ext.data.Store ({
    autoload: false,
    url: '../../../messaging/inc/action.php?list=to_options',
    reader: new Ext.data.JsonReader ({
        root: 'to_options',
        id: 'id',
        fields: ['id', 'name', 'group']
    })
});

var setRecipient = new Ext.form.ComboBox ({
    fieldLabel: 'To',
    store: recipientStore,
    valueField: 'id',
    displayField: 'name',
    editable: false,
    width: 150,
    allowBlank: false,
    triggerAction: 'all',
    tpl: new Ext.XTemplate(
        '<tpl for=".">',
        '<tpl if="this.group != values.group">',
        '<tpl exec="this.group = values.group"></tpl>',
        '<hr><h1><span style="color:gray;">{group}</span></h1><hr>',
        '</tpl>',
        '<div class="x-combo-list-item">{name}</div>',
        '</tpl>'
    )
});
于 2012-09-18T16:35:55.340 回答
1

既然您询问了 Extjs3,这个扩展可能是一个更好的解决方案:http ://www.sencha.com/forum/showthread.php?45412-Ext.ux.form.GroupComboBox

它是为 Extjs 2 编写的,但在我应用了帖子 15 中讨论的调整后,它在 Extjs 3 中对我来说效果很好。

请注意,这在 Extjs 4 中不起作用,在 Extjs 4 中执行此操作的讨论在这里:http ://www.sencha.com/forum/showthread.php?134344-Grouping-Combo

于 2013-03-28T17:45:21.153 回答