我知道我可以在代理设置中使用“extraParams”,但这会影响所有使用相同商店的元素.
如果我有一个网格正在使用名为“用户”的商店,将列出系统中的所有用户.同时我也有一个comboBox,它也使用了“Users”这个商店,但是这次我想列出所有“status = 2”的用户,因此我想发送参数“& status = 2”在Ajax调用后端.
如果我使用像:
store.getProxy().extraParams = { status: 2 };
它将工作,但网格将同时更新,也使用“& status = 2”.我只想要组合框使用参数.
我想我可以关闭网格上的“自动更新”,然后在组合框上的“渲染”事件上设置“extraParams”,然后在组合框隐藏时取消设置,但是会是一个非常难看的解决方案.
我也可以将商店复制到“Users2”,并将其用于组合框,但这也是一个难看的解决方案.
这样做的正确方法是什么?对大多数人来说,这是一件非常常见的事情.
更新1:
我知道我可以使用像:
store.load({ params:{ 'foo1': bar1,'foo2': bar2 } });
但是如何在ExtJS 4 MVC中使用它?在那里我只是在form-object中指定“store:Users”.如何将这些额外的参数发送到.load()函数?
我尝试了以下内容:
{ xtype: 'comboBox',fieldLabel: 'Server',name: 'server',//store: 'ServersIP',store: new Cloud.store.ServersIP(),/* listeners: { beforeload: function(store,options) { console.log(store); } },*/ valueField: 'id',displayField: 'name_id',emptyText: 'Select a Server...',editable: false },
但是,它给出错误“未捕获TypeError:无法读取属性”ServersIP“未定义”
但这个名字是正确的:
Ext.define('Cloud.store.ServersIP',{ extend: 'Ext.data.Store',model: 'Cloud.model.Server',
另外,我究竟要把听众呢?我假设在我的例子中我没有得到那个正确的?
更新2:
我现在有一点解决方案:
store: Ext.create('Cloud.store.ServersIP',{ proxy: { extraParams: { param1: 'value1',param2: 'value2' } },}),
以上不行.如果我在Ext.Create的参数中只有一个“一级”变量,它将起作用.由于某种原因,当我传入proxy =>时,它不喜欢它extraParams =>参数1.
这一个工作:
store: Ext.create('Cloud.store.ServersIP',{ aaa: 'bbb' }),
但当然,我的extraParams不在那里.任何人都知道如何解决这个最后一部分?
解决方法
comboBox queryMode:带有附加参数的remote.
只需在initComponent中的“VIEW”中实例化存储,并覆盖代理
//instantiate the store var store = Ext.create('Cloud.store.ServersIP',{ storeId: 'YourStoreId' }); store.proxy.extraParams = { param1: 'value1',param2: 'value2' };
和xtype:组合框
//set comboBox store { xtype: 'comboBox',queryMode:'remote',store : Ext.data.StoreManager.lookup('YourStoreId'),... ... }
我希望你明白我提出的解决方案.