是否可以从商店获得组合框参考?ExtJS 6



以下场景:

{
xtype: 'combo',
displayField: 'LANGTEXT',
valueField: 'KURZTEXT',
store: {
remoteSort: false,
autoLoad: false,
pageSize: 999999,
fields: [
{ name: 'KURZTEXT', type: 'string' },
{ name: 'LANGTEXT', type: 'string' }
],
proxy: {
type: 'ajax',
url: 'callHandler.cfc',
actionMethods: { read: 'POST' },
reader: {
type: 'json',
rootProperty: 'DATA.ROWS',
totalProperty: 'TOTALCOUNT'
}

},
listeners: {
load: function(store, records, successful, operation, eOpts ){
//is something like this possible?
var combo = store.getCombo()

}
}
}                      
}

有可能从商店获得类似于store.getCombo()的组合框引用吗?我知道通常你只能从组合框中获得商店参考。但我想,如果商店是在组合框中创建的,也许它也可以反过来工作?

您可能需要检查combox-afterQuery模板方法。

这是一种可用于combobox组件的配置,其工作方式几乎与商店的加载事件类似。在这里,您可以访问combobox组件和商店。

我认为缺点是:只有当点击组合触发器或在组合的文本字段中键入值时,才会调用它。我相信,如果你想在这些事件发生后进行后期处理,这已经有帮助了。

{
xtype: 'combo',
displayField: 'LANGTEXT',
valueField: 'KURZTEXT',
store: {
remoteSort: false,
autoLoad: false,
pageSize: 999999,
fields: [
{ name: 'KURZTEXT', type: 'string' },
{ name: 'LANGTEXT', type: 'string' }
],
proxy: {
type: 'ajax',
url: 'callHandler.cfc',
actionMethods: { read: 'POST' },
reader: {
type: 'json',
rootProperty: 'DATA.ROWS',
totalProperty: 'TOTALCOUNT'
}

}
},
afterQuery: function (queryPlan) {
var combo = queryPlan.combo; // I guess `var combo = this;`  should work too..
var store = combo.getStore();

// always return queryPlan
return queryPlan;
}
}

如果您有任何问题,请告诉我。

我能想到的唯一解决方案是编写一个自定义匹配器函数。

您可以通过覆盖Ext.Component并添加匹配器函数来实现这一点:

Ext.override(Ext.Component, {
hasStoreId: function (storeId) {
if (Ext.isFunction(this.getStore) && this.getStore().storeId) {
return this.getStore().storeId === storeId;
}
return false;
}
});

现在您为每个组件都有了匹配器功能,您可以搜索具有给定storeId的所有组件,如下所示:

Ext.ComponentQuery.query("{hasStoreId('mystore')}");

你也可以更精确,只搜索符合以下条件的组合:

Ext.ComponentQuery.query("combo{hasStoreId('mystore')}");

既然你已经拥有了给定storeId的所有组合,你应该可以很容易地检索到你需要的组合。

这里有一个Sencha小提琴与一个工作的例子:示例代码

最新更新