gpt4 book ai didi

javascript - Sencha Touch 2.0 动态更改数据存储 extraParams

转载 作者:行者123 更新时间:2023-12-02 19:42:00 24 4
gpt4 key购买 nike

我有 2 个选择字段,其中包含通过 JSONP 代理从数据存储连接的选项。我需要根据第一个选择字段中选择的值更改第二个选择字段中的值。为此,我认为我应该根据选择字段中选择的值更改代理 extraParams 中的参数。

我已经尝试过这篇文章 How can I change/add params on a store 中的 .getProxy() 方法但它不起作用。我在控制台中遇到错误:

Uncaught TypeError: Object function () {
return this.constructor.apply(this, arguments);
} has no method 'getProxy'

请参阅下面的代码及其说明。有什么想法如何做到这一点吗?

型号:

Ext.define('Providers.model.Provider', {    
extend: 'Ext.data.Model',
config: {
fields: [
{
name: 'id',
type: 'int'
},
{
name: 'name',
type: 'string'
}
]
}
});

第一家商店:

Ext.define('Providers.store.ProvidersType', {    
extend: 'Ext.data.Store',
config: {
model: 'Providers.model.Provider',
proxy: {
type: 'scripttag',
url : 'http://example.com/providers/service.php',
extraParams: {
action: 'provider_types',
username: 'test2',
callback: '?',
format: 'json'
},
reader: {
type: 'json',
rootProperty: 'providers'
}
},
autoLoad: true
}
});

第二家商店:

Ext.define('Providers.store.Countries', {    
extend: 'Ext.data.Store',
config: {
model: 'Providers.model.Provider',
proxy: {
type: 'scripttag',
url : 'http://example.com/providers/service.php',
extraParams: {
action: 'countries',
username: 'test2',
provider_type: 14, //<--- here should be value from first selectfield
callback: '?',
format: 'json'
},
reader: {
type: 'json',
rootProperty: 'countries'
},
},
autoLoad: true
}
});

布局:

xtype: 'fieldset',
layout: 'vbox',
items: [
{
xtype: 'selectfield',
id: 'selectType',
cls: 'combobox',
store: 'ProvidersType',
displayField: 'name',
valueField: 'id',
listeners: {
change: function(field, value) {
if (value instanceof Ext.data.Model) {
value = value.get(field.getValueField());
}
console.log(value); //<-- get value works fine, how insert it in proxy param?
//Providers.store.Countries.getProxy().extraParams.provider_type = 10; <-- Do not work

}
}
},
{
xtype: 'selectfield',
id: 'selectCountry',
placeHolder: 'Country',
cls: 'combobox',
store: 'Countries',
displayField: 'name',
valueField: 'id'
}

]

谢谢。

最佳答案

您可以创建一个新的存储实例并设置其代理,然后重置选择字段的存储。您可以将此代码添加到您的监听器函数中:

newstore = Ext.create('Providers.store.Countries', {});
newstore.setProxy(
{
type: 'scripttag',
url : 'http://example.com/providers/service.php',
extraParams: {
action: 'countries',
username: 'test2',
provider_type: value,
callback: '?',
format: 'json'
},
reader: {
type: 'json',
rootProperty: 'countries'
},
}
);
newstore.load();

countrySelection = Ext.getCmp('selectCountry');
countrySelection.setStore(newstore);
//OR: countrySelection.store = newstore;

关于javascript - Sencha Touch 2.0 动态更改数据存储 extraParams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10288061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com