网格编辑器中组合框的Extjs过滤
我有一个带有组合框编辑器的网格。我想根据行记录中的值筛选combobox存储 我现在得到的是:网格编辑器中组合框的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
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组合框的选定值未绑定到行记录的值。这是对的,还是我遗漏了什么?