ExtJS动态过滤ComboBox

时间:2015-05-27 08:26:21

标签: javascript extjs combobox

我有一个包含多个组合框的属性网格,我想根据前一个框中选择的内容过滤一个框中的值。

我的代码如下所示:

var tempPropGrid = me.getView().add(
    {
        xtype:'propertygrid',
        width: 80,
        header: false,
        title: 'prop grid',
        //for some reason the headers are not hiding, we may need to deal with this using CSS
        //hideHeaders: true,
        enableColumnResize: false,
        sortableColumns: false,
        nameColumnWidth: 1,
        source: record.data,
        sourceConfig: {
            teamName: {
                editor: Ext.create('Ext.form.ComboBox', {
                    store: teams,
                    queryMode: 'local',
                    displayField: 'teamName',
                    valueField: 'teamName'
                }),
                displayName: 'Team'
            },
            leadDev : {
                editor: Ext.create('Ext.form.ComboBox', {
                    store: teamMembers.filter('teamName', teamName.value), // this probably won't work but you get the idea
                    queryMode: 'local',
                    displayField: 'personName',
                    valueField: 'personName'
                }),
                displayName: 'Lead Dev'
            },

我的JSON对象如下所示:

{
                    "periodName": "Week1",
                    "teamName": "tango",
                    "roleName": "SWE III",
                    "roleExperience": "3",
                    "id": "21ea7f61-a9a5-4dbd-b405-e7a0449f8096"
                },

所以基本上我正在为一个团队分配一个项目,然后根据我选择的团队,我想根据他们在该团队中选择一个leadDev。

我不确定如何获取组合框的值并动态应用过滤器,这样任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

网格中的每一行都是一个模型。因此,在leadDev组合框中,您只需要监听'expand'事件,然后检索当前行模型并将此模型中的值应用于过滤器。 它应该看起来像这样(未选中):

Ext.create('Ext.form.ComboBox', {
                store: store
                queryMode: 'local',
                displayField: 'personName',
                valueField: 'personName',
                listeners: {
                    'expand' : function(combo) {
                         var grid = combo.up('grid');
                         var selection = grid.getSelectionModel().getSelection();
                         var currentRowModel = //get this from selection
                         combo.getStore().clearFilter(true);
                         combo.getStore().filter('teamName',currentRowModel.teamName);
                     }
                }
            })

当用户从第一个组合框

中选择值时,您需要更新当前模型