如何用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里,步骤如下:
- 给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请求 }), // ... 其他配置 }
- 在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
相关产品推荐
相关产品推荐

