You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JsonStore为ExtJS DataView填充数据?Store为空问题

解决JsonStore为空无法填充DataView的问题

看起来你已经能通过Ajax拿到数据,但没把数据和Store关联起来,同时你的Store也没有主动加载数据,我来帮你梳理两种解决方案:

方案一:让JsonStore自动加载数据

你在View里定义的JsonStore默认不会自动发起请求,只需要添加autoLoad: true配置,它就会自动去请求数据并填充到DataView里:

store : new Ext.data.JsonStore({
    url : '/test/json_p',
    baseParams : {
        "params[]" : "RESCUE",
        respName : "",
        method : "GetActivities",
        format : "json"
    },
    idProperty : 'ACT_ID',
    fields : [ 'ACT_ID', '_ACT_TYPE', '_FIRST_FORM', 'PRUEFSTATUS', '_DEBUG', '_SYNC_STATUS', '_SYNC_STATUS2', 'EQART', 'INVNR', 'ZTSPRID', 'ANLAGE_ZTSPRID', 'ZTSPRIDT' ],
    autoLoad: true // 新增自动加载配置
}),

或者你也可以在DataView渲染完成后手动触发加载,修改afterrender事件:

listeners : {
    'afterrender' : function(comp) {
        console.log('Test');
        comp.getStore().load(); // 手动调用Store的load方法
    },
    scope : this
},

方案二:用你已有的Ajax请求数据填充Store

如果你想保留自己的Ajax请求逻辑,需要把获取到的数据手动注入到Store里,步骤如下:

  1. 给DataView添加一个itemId,方便在Controller中定位:
items : {
    xtype : 'dataview',
    itemId: 'rescueDataView', // 新增itemId
    listeners : {
        'afterrender' : function(comp) {
            console.log('Test');
        },
        scope : this
    },
    store : new Ext.data.JsonStore({
        idProperty : 'ACT_ID',
        fields : [ 'ACT_ID', '_ACT_TYPE', '_FIRST_FORM', 'PRUEFSTATUS', '_DEBUG', '_SYNC_STATUS', '_SYNC_STATUS2', 'EQART', 'INVNR', 'ZTSPRID', 'ANLAGE_ZTSPRID', 'ZTSPRIDT' ]
        // 这里去掉url和baseParams,改用自己的Ajax请求
    }),
    // ... 其他配置
}
  1. 在Controller的回调方法中,获取Store并加载数据:
getActivitiesToRescueCallback : function(options, success, response) {
    if (success) {
        var result = Ext.decode(response.responseText); 
        // 获取DataView组件
        var dataView = this.getView().down('#rescueDataView');
        // 获取对应的Store
        var store = dataView.getStore();
        // 将数据加载到Store中
        // 如果result直接是数据数组,用loadData;如果是包含data字段的对象,用store.loadData(result.data)
        store.loadData(result);
    }
},

额外注意点

你的XTemplate里用了{name}和STATUS==50,但你的Store字段里并没有name和STATUS,要替换成实际存在的字段,比如把{name}改成{ACT_ID},把STATUS==50改成PRUEFSTATUS==50,否则即使Store有数据,DataView也渲染不出内容:

tpl : new Ext.XTemplate('<table id="dataRescueTable">' + '<tpl for=".">', '<tr class="dataRow"><td>' + '<span <tpl if="PRUEFSTATUS==50">style="font-weight: bold;color:green"</tpl>>{ACT_ID}</span></td></tr>', '</tpl>', '</table>')

内容的提问来源于stack exchange,提问作者benz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:21:23