我意識到這是一個老問題,但最近我在一箇舊的ExtJS(4.0.2)的應用程序來解決一個滾動的問題,我需要在HTML觸發/事件(例如<表>標籤)實際上已更新/插入到網格視圖中。
以下腳本添加了新的「更新」事件Ext.grid.View。在html被插入視圖後,更新事件被觸發。
(function(){
var _setNewTemplate = Ext.grid.View.prototype.setNewTemplate;
Ext.override(Ext.grid.View, {
setNewTemplate: function(){
_setNewTemplate.apply(this, arguments);
var view = this;
var template = this.tpl;
template.overwrite = function(el, values, returnElement){
el = Ext.getDom(el);
el.innerHTML = template.applyTemplate(values);
view.fireEvent("update", view, el); //<--New Event!
return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
};
template.doInsert = function(where, el, values, returnEl) {
el = Ext.getDom(el);
var newNode = Ext.core.DomHelper.insertHtml(where, el, template.applyTemplate(values));
view.fireEvent("update", view, el); //<--New Event!
return returnEl ? Ext.get(newNode, true) : newNode;
}
}
});
})();
要使用新事件,只需將新事件偵聽器添加到網格視圖。示例:
paymentGrid.view.on("update", function(view, el){ //vs paymentGrid.store.on("load", ...
//do something...
console.log(el);
}, this);
請注意,這是使用ExtJS 4.0.2實施的。您可能需要更新您的ExtJS版本的腳本。
UPDATE
我發現,當一種觀點呈現一個空店新的「更新」事件不點火。作爲解決方法,我擴展了視圖的刷新方法。
(function(){
var _refresh = Ext.grid.View.prototype.refresh;
Ext.override(Ext.grid.View, {
refresh: function() {
_refresh.apply(this, arguments);
var view = this;
var el = view.getTargetEl();
var records = view.store.getRange();
if (records.length < 1) {
view.fireEvent("update", view, el); //<--New Event!
}
}
});
})();
您使用的是什麼版本的ExtJs?我認爲你試圖從錯誤的角度解決你的問題。 – sha
我正在使用ExtJS 4.0.1,謝謝。 –