gpt4 book ai didi

javascript - 动态存储未在组合框 extjs 中加载数据

转载 作者:行者123 更新时间:2023-11-28 00:28:06 24 4
gpt4 key购买 nike

我有两个组合框,即组合 1 和组合 2,其中填充了两个不同的商店(例如商店 1 和商店 2)。组合 2 中的值取决于组合 1 中选择的内容。然后,我查询服务器以获取组合 2 的数组。换句话说,我在组合 1 中的选择决定了组合 2 的值。我设置的代码不起作用,并给出了一个非常通用的错误错误:对象不支持此操作。我在浏览器调试器中看到返回值,因此我知道这不是我的 ajax 请求。我想我在组合框中遗漏了一些小东西,导致值无法显示。请参阅下面的代码以获得更好的想法

   var store1 = Ext.create('Ext.data.ArrayStore', {
model: 'store1model',
autoLoad: true,
autoDestroy: true,
proxy: {
type: 'ajax',
url: 'backend.java'
extraParams: {
'param1': param1
},
reader: {
type: 'json'
}
  }
});

var store2 = Ext.create('Ext.data.ArrayStore', {
model: 'store2model',
autoLoad: true,
autoDestroy: true,
storeId: 'store2Id',
proxy: 'memory',
readre: {
type: 'json'
}
});

var panel = Ext.create('Ext.form.Panel', {
title: 'Panel',
id: 'PanelId',
url: 'backened.java',
method: 'GET',
items: [{
xtype: container,
layout: 'column',
items: [{
xtype: 'container',
columnWidth: .5,
layout: 'anchor',
items: [{
xtype: 'combobox',
fieldLabel: 'Combo1',
name: 'Combo1',
store: store1,
displayField: 'name',
valueField: 'name',
anchor: '96%',
listeners: {
select: function(combo, records) {
Ext.Ajax.request({
url: 'backend.java',
method: 'GET',
params: {
"param2": combo.getValue()
},
success: function(response) {
var data = Ext.Msg.decode(response.responseText);
store2.loadData(data);
}
});
}
}
}, {
xtype: 'combobox',
fieldLabel: 'Combo2',
name: 'Combo2',
id: 'Combo2',
store: store2,
displayField: 'someField',
valueField: 'someField'

}]

}]
}]


});

经过一番搜索,我发现可能我必须监听combo2中的事件变化。不确定这是否正确,如果是,那将如何工作?所以我想我的问题有两个方面。首先,为什么上面的代码不起作用?其次,是否有更好/更优雅的方法来做到这一点。

编辑

 var store2 = Ext.create('Ext.data.ArrayStore', {
model: 'store2model',
autoLoad: true,
autoDestroy: true,
storeId: 'store2Id',
proxy: {
type: 'ajax',
url: 'backend.java'
// extraParams: {
// 'param2': param2
// },
reader: {
type: 'json'
}

}
});

最佳答案

看起来您为 store1 分配了一个代理,以便您可以执行 store1.load(),也许可以尝试对 store2 执行相同的操作。

因此,您可以将 url 'backend.java' 指定为 store2 的代理,并且当选择combo1 时,您可以加载combo2 的商店,其值为参数。

  {
xtype: 'combobox',
fieldLabel: 'Combo1',
name: 'Combo1',
store: store1,
displayField: 'name',
valueField: 'name',
anchor: '96%',
listeners: {
select: function(combo, records) {
Ext.getCmp('Combo2').getStore().load({
params: {
param2: combo.getValue()
}
});
}
}
},

这将使用 param2 参数加载组合2的存储。因此,无论代理 url 是什么,只需分配combo2 的存储即可。也许尝试一下?

关于javascript - 动态存储未在组合框 extjs 中加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286360/

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