如何将控制器中的json数据传递给EXTJS 4.0中的视图

时间:2014-07-05 07:13:57

标签: extjs

我在网格中声明了一个组合框

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数据到视图。

1 个答案:

答案 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的优点所在:将代码拆分为许多易于维护的小文件(代码重用等)。