我知道有很多关于在另一个函数中调用函数的问题,但不幸的是,它们都没有为我工作,或者我无法实现我的项目!
我有一个Window
类,里面有两个函数。第二个是通过combobox
获取带有ID的特定网址并将其返回。我需要在第一个URL
;
function
getSelectCountry: function(){
var countryRecord = Ext.ComponentQuery.query('[name=country]')[0].getSelectedRecord();
var countryId = countryRecord.get('id');
var urlWithId = MyApp.Globals.getUrl() + '/city/view/list/?countryid='+ countryId;
// var store = Ext.getStore('cityCombo');
// store.load({
// url : MyApp.Globals.getUrl() + '/city/view/list/?countryid='+ countryId,
// });
return urlWithId;
}
我需要在urlWithId
citycombo
proxy
内的url
下面使用此返回的Ext.define('MyApp.view.weather.SettingsWindow', {
...
getSettingsItems: function () {
var me = this;
var settingsItems = [
{
xtype: 'form',
layout: {type: 'vbox', align: 'stretch', pack: 'start'},
reference: 'settingsForm',
items: [
{
xtype: 'citycombo',
itemId: 'cityName',
name: 'city',
afterLabelTextTpl: MyApp.Globals.required,
allowBlank: false,
flex: 1,
store: {
storeId: 'cityCombo',
proxy: {
type: 'ajax',
// I neeed returned URL with ID on here.
url: MyApp.Globals.getUrl() + '/city/view/list/',
reader: {
type: 'json',
rootProperty: 'data'
}
},
pageSize: 0,
sorters: 'description',
autoLoad: true
}
},
。它将列出城市取决于以下国家;
store.load
我已尝试使用URL
或创建一个新变量并调用它,但我无法成功进行任何尝试。
我很乐意接受任何想法。
更新
getSelectCountry
函数(1)生成完整citycombo
,并使用此新返回的网址过滤[XmlRoot("ColorPages")]
public class ColorPages
{
[XmlElement("Ghost")]
List<Ghost> ghost{ get; set; }
[XmlElement("Page")]
List<Page> page{ get; set; }
}
[XmlRoot("Ghost")]
public class Ghost
{
}
[XmlRoot("Page")]
public class Page
{
}
上的城市查询(2)即可。答案 0 :(得分:1)
如果只是关于那个小参数,那么你真正想要做的就是在商店的beforeload监听器中填充extraParams
属性。
listeners: {
beforeload: function(store) {
// Get countryRecord from somewhere...
store.getProxy().setExtraParams("countryid", countryRecord.get('id'))
}
如果服务器/路径名也不同,您还可以setUrl()
。
相关小提琴:https://fiddle.sencha.com/#view/editor&fiddle/2c8a
更新:
那么,你真正想做的是:
xtype: 'combobox',
queryMode: 'local',
fieldLabel: 'Country',
store: ...,
listeners: {
select: function(combo, countryRecord) {
var cityStore = combo.nextSibling().getStore();
cityStore.getProxy().setExtraParam('countryId', countryRecord.get('Id'));
cityStore.load();
}
},
},{
xtype: 'combobox',
queryMode: 'local',
fieldLabel: 'City',
store: ...,
答案 1 :(得分:1)
我看到两种可能性:
cityCombo
已定义了设置url
或extraparams
的前载回调,您可以在change
组合框上定义country
侦听器,并调用cityCombo's
} load()
从那里开始。 见下文:
listeners: {
change: function () {
Ext.getStore('cityCombo')
.load()
}
}
或者甚至更好,从商店中移除beforeload
并将其中的内容放在第一个change
combobox
中
listeners: {
change: function (combo, newValue) {
var cityStore = Ext.getStore('cityCombo')
cityStore.getProxy()
.setUrl(getSelectedCountry());
cityStore.load();
}
}
注意:您可以进一步重构它,摆脱getSelectedCountry()
并在侦听器传递的组合上完成所有操作
cityCombo
上的过滤器代替往返编辑:修复了第一个代码块的显示,添加了缺少load()
调用。