以下场景:
{
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小提琴与一个工作的例子:示例代码