我在网格中声明了一个组合框
header: '<b>Reasons</b>',
width : 150,
editor:
{
xtype: 'combobox',
store: 'reasonstore',
displayField: 'displayText',
valueField: 'value',
queryMode: 'local',
}
我的商店是
var reasonstore = Ext.create(&#39; Ext.data.Store&#39;,{ 字段:[&#39; displayText&#39;,&#39; value&#39;], id:&#39; resonstoreid&#39; });
我做了一个休息电话并在控制器中获得了我的jsondata
successCallback:function(json){
var mydata = json.reason;
Ext.getCmp('resonstoreid').getStore().loadData(json.reason);
但是我得到Ext.getCmp(&#39; resonstoreid&#39;)是未定义的。 我的观点只是首先加载到控制器。 所以如何从控制器加载这个json数据到视图。
答案 0 :(得分:1)
您应该使用 Ext.getStore("xxx") 来获取对商店的引用!这应该可以解决你的问题。
var store = Ext.getStore("resonstoreid");
store.loadData(json.reason);
其他建议
而不是进行AJAX调用,并使用loadData(xxx)
使用商店的load()
函数填充商店。见这里:Ext.data.Store.load
这样做,您的商店配置应该如下所示
//create File store/Reasons.js
Ext.define('XYZ.store.Reasons', { //XYZ ... you namespace
extend: 'Ext.data.Store',
fields: ['displayText', 'value'],
id : 'Reasons',
autoLoad: true,
proxy: {
type: 'ajax',
actionMethods: {create: 'POST', read: 'GET', update: 'POST', destroy: 'POST'},
url: 'xxx',
method: 'POST',
reader: {
type: 'json',
root: 'data'
}
}
});
之后,你可以这样做:
var store = Ext.getStore("Reasons");
store.load(
params: {
group: 3,
type: 'user'
},
callback: function(records, operation, success) {
// do something after the load finishes
},
scope: this
});
优点是更好的应用程序结构,load
为您执行ajax请求。这正是extjs的优点所在:将代码拆分为许多易于维护的小文件(代码重用等)。