que darse cuenta de esto es una cuestión de edad, pero recientemente he tenido que solucionar un problema de desplazamiento en un (4.0.2) aplicación de edad ExtJS y necesitaba un disparador/evento para cuando html (por ejemplo <mesa> etiqueta) fue realmente actualizado/insertado en la vista de cuadrícula.
La siguiente secuencia de comandos agrega un nuevo evento de "actualización" a Ext.grid.View. El evento de actualización se activa después de que se haya insertado html en la vista.
(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;
}
}
});
})();
Para utilizar el nuevo evento, sólo tiene que añadir un nuevo detector de eventos a la vista de cuadrícula. Ejemplo:
paymentGrid.view.on("update", function(view, el){ //vs paymentGrid.store.on("load", ...
//do something...
console.log(el);
}, this);
Tenga en cuenta que esto se implementó utilizando ExtJS 4.0.2. Es posible que deba actualizar el script para su versión de ExtJS.
ACTUALIZACIÓN
me encontré con que el nuevo evento de "actualización" no estaba disparando cuando miras estaba convirtiendo en una tienda vacía. Como solución alternativa, extendí el método de actualización de la vista.
(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!
}
}
});
})();
¿Qué versión de ExtJs está utilizando? Creo que estás tratando de resolver tu problema desde un ángulo equivocado. – sha
Estoy usando ExtJS 4.0.1, gracias. –