Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网格编辑器中组合框的Extjs过滤_Extjs_Filter_Combobox_Extjs4.2 - Fatal编程技术网

网格编辑器中组合框的Extjs过滤

网格编辑器中组合框的Extjs过滤,extjs,filter,combobox,extjs4.2,Extjs,Filter,Combobox,Extjs4.2,我有一个带有组合框编辑器的网格。我想根据行记录中的值筛选combobox存储 我现在得到的是: editor: { xtype: 'combo', forceSelection: true, store: 'ship.Transportmodes', displayField: 'name', valueField: 'id', queryMode: 'local', listeners: { expand: functio

我有一个带有组合框编辑器的网格。我想根据行记录中的值筛选combobox存储

我现在得到的是:

editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    listeners: {
        expand: function(combo){
            var shipper = combo.up('grid').editingPlugin.activeRecord.get('shipper');
            combo.store.filterBy(function(record){
                console.log(record.get('shippers').indexOf(shipper))
                return record.get('shippers').indexOf(shipper) != -1
            })
        }
    },
    editable: false
}},
editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    // no listener here
    editable: false
}
这是可行的,但有一个问题:当下拉列表显示在字段顶部时,其余选项显示在远离字段的地方,删除选项的空间仍然是分配的。

我尝试根据以下事件筛选商店:

网格:编辑前 组合:在渲染之前 组合:渲染 组合:后渲染 在每种情况下,结果如下:存储被正确过滤,但在组合框展开时,过滤器被清除

我想知道会发生什么。为什么组合框总是在显示选项列表之前清除其存储的过滤器

有人能洞察幕后情况吗?或者告诉我图片中缺少了什么?

您可以这样做: 小提琴链接:

您可以这样做: 小提琴链接:


我终于明白了。问题不在于ExtJs正在清除组合框存储上的过滤器。这个问题源于对过滤器工作原理的错误理解。事实上,filterBy仅临时筛选存储,但不会将该筛选器保存在存储中

另一方面,addFilter{filterFn:…}将过滤器添加到存储的过滤器集合中

使用addFilter添加到存储区的筛选器在呈现该组合框后仍将应用,使用filterFn应用的筛选器是可变的

现在我可以在网格的beforeedit事件中添加过滤器,并在edit和canceledit中删除它

宠儿

我有一个带有组合框编辑器的网格。我想根据行记录中的值筛选combobox存储

我现在得到的是:

editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    listeners: {
        expand: function(combo){
            var shipper = combo.up('grid').editingPlugin.activeRecord.get('shipper');
            combo.store.filterBy(function(record){
                console.log(record.get('shippers').indexOf(shipper))
                return record.get('shippers').indexOf(shipper) != -1
            })
        }
    },
    editable: false
}},
editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    // no listener here
    editable: false
}
控制器:

onBeforeedit: function(edit, e){
    this.getStore('mystore').addFilter(
        {id: 'shipperFilter', 
        filterFn: function(record){
            return e.record.get('shippers').indexOf(this.shipper) != -1
        }
    })
}

我终于明白了。问题不在于ExtJs正在清除组合框存储上的过滤器。这个问题源于对过滤器工作原理的错误理解。事实上,filterBy仅临时筛选存储,但不会将该筛选器保存在存储中

另一方面,addFilter{filterFn:…}将过滤器添加到存储的过滤器集合中

使用addFilter添加到存储区的筛选器在呈现该组合框后仍将应用,使用filterFn应用的筛选器是可变的

现在我可以在网格的beforeedit事件中添加过滤器,并在edit和canceledit中删除它

宠儿

我有一个带有组合框编辑器的网格。我想根据行记录中的值筛选combobox存储

我现在得到的是:

editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    listeners: {
        expand: function(combo){
            var shipper = combo.up('grid').editingPlugin.activeRecord.get('shipper');
            combo.store.filterBy(function(record){
                console.log(record.get('shippers').indexOf(shipper))
                return record.get('shippers').indexOf(shipper) != -1
            })
        }
    },
    editable: false
}},
editor: {
    xtype: 'combo',
    forceSelection: true,
    store: 'ship.Transportmodes',
    displayField: 'name',
    valueField: 'id',
    queryMode: 'local',
    // no listener here
    editable: false
}
控制器:

onBeforeedit: function(edit, e){
    this.getStore('mystore').addFilter(
        {id: 'shipperFilter', 
        filterFn: function(record){
            return e.record.get('shippers').indexOf(this.shipper) != -1
        }
    })
}

您可以尝试使过滤器不被清除。@alexander谢谢,我会尝试的。我看到了这个配置,但我认为它只会在模糊组合时改变行为。@alexander不,不幸的是,这没有帮助。ClearFilterNoblur仅适用于键入时使用的筛选器。您可以尝试使筛选器不被清除。@alexander谢谢,我会尝试的。我看到了这个配置,但我认为它只会在模糊组合时改变行为。@alexander不,不幸的是,这没有帮助。ClearFilterNoblur仅适用于键入时使用的筛选器。您的小提琴不能与ExtJs 4.2一起使用。看起来Extjs 6不再有我遇到的问题。这意味着我真的应该努力升级。在ExtJS4.2中,widgetcolumn for grid面板不起作用。你需要更新你的extjs版本。我会更新,但这不是一个即时选项。我认为这将需要一周的时间,因为该应用程序非常重要,它实现的功能不是Ext 4.2的固有功能,而是Ext 6的固有功能。我现在明白了您的解决方案和我的需求之间的区别。我需要一个combobox作为celleditor,您建议将combobox作为widgetcolumn。这就引出了另一个问题:widgetcolumn中的组合框是否充当编辑器?据我所知,widgetcolumn组合框的选定值未绑定到行记录的值。这是正确的,还是我遗漏了什么?你的提琴不适用于ExtJS4.2。看起来Extjs 6不再有我遇到的问题。这意味着我真的应该努力升级。在ExtJS4.2中,widgetcolumn for grid面板不起作用。你需要更新你的extjs版本。我会更新,但这不是一个即时选项。我认为这将需要一周的时间,因为该应用程序非常重要,它实现的功能不是Ext 4.2的固有功能,而是Ext 6的固有功能。我现在明白了您的解决方案和我的需求之间的区别。我需要一个combobox作为celleditor,您建议将combobox作为widgetcolumn。这就引出了另一个问题:widgetcolumn中的组合框是否充当编辑器?据我所知,widgetcolumn组合框的选定值未绑定到行记录的值。这是对的,还是我遗漏了什么?