我在ExtJs中有以下控制器:
Ext.define('FileBrowser.controller.BrowserController', {
extend: 'Ext.app.Controller',
views: ['browser.tree_dir', 'browser.grid_file'],
stores: ['store_dir', 'store_file'],
init: function () {
this.control({
'window > tree_dir': {
itemclick: {
fn: function (view, record, item, index, event) {
if (record.isLeaf() == false) {
Ext.getStore('store_file').load({
params: {
dir: record.data.id
}
});
var parentOfCurrentFiles = record.data.id
nodeId = record.data.id;
htmlId = item.id;
var grid_view = this.getView('browser.grid_file');
var grid_view_v = grid_view.getView();
grid_view_v.refresh();
}
}
}
}
});
},
onPanelRendered: function () {
console.log('The panel was rendered');
}
});
如果你注意到'itemclick',我试图刷新我的一个观点,我的方法是行不通的。任何人都可以向我解释我如何刷新视图?谢谢。
答案 0 :(得分:2)
将var grid_view= this.getView('browser.grid_file');
替换为var grid_view= this.getView('browser.grid_file').create();
以获取真实实例(正如我已经告诉您的那样,getView() only return the view config, not a instance!
),或者如果您已经创建了该网格并且只存在一个实例,请使用xtype沿使用组件查询来接收它var grid_view=Ext.ComponentQuery('grid_file')[0]
现在进入refresh()
基本上,您永远不需要调用此方法,因为您的网格绑定到商店,并且对此商店所做的任何更改都会直接反映到您的网格中。
我还建议您在创建视图实例而不是使用查询时存储视图实例,或者直接使用 ref 属性,让ExtJS为您完成工作。最后一个是我猜的最佳解决方案......在API示例中查看ref并尝试一下。
答案 1 :(得分:0)
所以你要做的是,加载商店并在刷新grid_view后反映数据......?
在这种情况下,您没有对网格进行setStore()
,或者如果您已在其他地方进行了此操作,那么您不会对商店进行setData()
。你也应该在网格上调用刷新。