Javascript ExtJs 5:具有内存存储的组合框不显示数据
在我的项目中,我有一个内存存储,其中包含组合框的本地数据。 我通过Javascript ExtJs 5:具有内存存储的组合框不显示数据,javascript,extjs,combobox,extjs5,Javascript,Extjs,Combobox,Extjs5,在我的项目中,我有一个内存存储,其中包含组合框的本地数据。 我通过store.loadData()插入数据,但也尝试了store.loadRawData()。 数据在存储区中,但当我将其分配给组合框时,无法选择项目。组合框是空的 例如,我有以下数据 var data = [ { name: 'Tom', age: 20 }, { name: 'Peter', age: 30 } ]; 我使用内存代理
store.loadData()
插入数据,但也尝试了store.loadRawData()
。
数据在存储区中,但当我将其分配给组合框时,无法选择项目。组合框是空的
例如,我有以下数据
var data = [
{
name: 'Tom',
age: 20
},
{
name: 'Peter',
age: 30
}
];
我使用内存代理和字段配置存储
var store = Ext.create('Ext.data.Store', {
fields: [
'name',
'age'
],
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
在我的应用程序中,我用
store.loadRawData(data, false);
然后我将存储分配给一个组合框,但无法进行选择
var combobox = Ext.create('Ext.form.field.ComboBox', {
queryMode: 'local',
typeAhead: true,
forceSelection: true,
valueField: 'name',
store: store
});
但当我迭代存储区的数据并将其记录到控制台时,每个数据行都在其中
store.each(function(record){
console.log('name in store: %s', record.get('name'));
});
// In console:
// name in store: Tom
// name in store: Peter
我使用extjs5.0.1,可以在中找到小提琴
我错过了什么?感谢您的建议和提示。您只需使用内联数据即可:
Ext.onReady(function() {
var data = [{
name: 'Tom',
age: 20
}, {
name: 'Peter',
age: 30
}];
var store = Ext.create('Ext.data.Store', {
fields: ['name', 'age'],
data: data
});
// data is loaded successfully into store
store.each(function(record) {
console.log('name in store: %s', record.get('name'));
});
// combobox is empty...
var combobox = Ext.create('Ext.form.field.ComboBox', {
queryMode: 'local',
typeAhead: true,
forceSelection: true,
valueField: 'name',
renderTo: Ext.getBody(),
store: store
});
});
在您使用的代码中,您指定了一个Json读取器,但数据变量中的数据不是Json字符串。如果您想使用JSON,您应该这样做:
{
"rows": [
{
"name": "Tom",
"age": 20
},
{
"name": "Peter",
"age": 30
}
]
}
您唯一的问题是缺少组合框的
displayField
属性
Ext.onReady(function() {
var data = [{
name: 'Tom',
age: 20
}, {
name: 'Peter',
age: 30
}];
var store = Ext.create('Ext.data.Store', {
fields: ['name', 'age'],
proxy: {
type: 'memory',
reader: {
type: 'json'
}
}
});
// loadRawData happens at an other place in the application
// only here for the example
store.loadRawData(data, false);
// data is loaded successfully into store
store.each(function(record) {
console.log('name in store: %s', record.get('name'));
});
// combobox is empty...
var combobox = Ext.create('Ext.form.field.ComboBox', {
queryMode: 'local',
typeAhead: true,
forceSelection: true,
displayField: 'name', // <-- Add this
valueField: 'name',
renderTo: Ext.getBody(),
store: store
});
});
Ext.onReady(函数(){
风险值数据=[{
名字:“汤姆”,
年龄:20
}, {
姓名:'彼得',
年龄:30
}];
var store=Ext.create('Ext.data.store'{
字段:[“姓名”、“年龄”],
代理:{
键入:“内存”,
读者:{
键入:“json”
}
}
});
//loadRawData发生在应用程序中的其他位置
//这里只是举个例子
store.loadRawData(数据,false);
//数据已成功加载到存储区
存储。每个功能(记录){
console.log('name in store:%s',record.get('name');
});
//组合框是空的。。。
var combobox=Ext.create('Ext.form.field.combobox'{
queryMode:'本地',
是的,
选择:对,
displayField:'name',//是的,内联数据正在工作,但如何在运行时更改它?我必须为每次更改创建一个新的存储区?您希望更改什么?您可以编辑存储区中的每个记录。内存存储区在内存中使用,当不再需要时会丢失。例如,当我想向存储区添加其他记录时。我必须创建吗使用新数据创建一个新的存储实例并将其设置为组合框?不,只需添加另一条记录:store.add({name:'bob',age:35});