Zdaję sobie sprawę, że jest to stare pytanie, ale ja niedawno rozwiązać problem przewijania w aplikacji (4.0.2) i stary ExtJS Potrzebowałem wyzwalania/event dla kiedy html (np < stół > tag) został faktycznie zaktualizowany/wstawiony do widoku siatki.
Poniższy skrypt dodaje nowe zdarzenie "update" do pliku Ext.grid.View. Zdarzenie aktualizacji jest uruchamiane po wstawieniu html do widoku.
(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;
}
}
});
})();
Aby użyć nowego zdarzenia, wystarczy dodać nowy detektor zdarzeń do widoku siatki. Przykład:
paymentGrid.view.on("update", function(view, el){ //vs paymentGrid.store.on("load", ...
//do something...
console.log(el);
}, this);
Należy zauważyć, że zostało to zaimplementowane przy użyciu oprogramowania ExtJS 4.0.2. Być może będziesz musiał zaktualizować skrypt dla swojej wersji ExtJS.
UPDATE
okazało się, że nowy „update” zdarzenie nie strzelał gdy pogląd renderowania pusty magazyn. W celu obejścia tego problemu rozszerzyłem metodę odświeżania widoku.
(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!
}
}
});
})();
Jakiej wersji ExtJs używasz? Myślę, że próbujesz rozwiązać swój problem pod niewłaściwym kątem. – sha
Używam ExtJS 4.0.1, dziękuję. –