requestend kendo data javascript kendo-ui grid datasource

javascript - data - requestend kendo grid



Kendo UI clear filter por campo (2)

Tengo una red kendo en mi página. Esta grilla tiene fuente de datos. Y en esta fuente de datos tengo una matriz de filtros complejos. Por ejemplo:

http://s7.postimg.org/bmqxgp2ff/filters.png

Y antes de agregar un nuevo conjunto de filtros a mis filtros de fuente de datos, necesito eliminar todos los filtros donde campo = "fld_32" por ejemplo.

Creo que es posible hacerlo por recursión, pero en la cuadrícula hay un componente de filtro que tiene el botón "borrar" y el botón borrar hace lo mismo que yo necesito. Pero no tengo idea de cómo funciona y cómo llamarlo programáticamente.


Todo lo que necesitas hacer es usar esta función. Esto borrará todos los filtros:

function clearFiter() { $("form.k-filter-menu button[type=''reset'']").trigger("click"); }


Extiendo kendoGrid por método para borrar todos los filtros en la grilla:

kendo.ui.Grid.prototype.clearFilters = function(args){ // MODIFY THIS PART var ignore = []; // test arguments if(typeof args === ''object''){ if(args.hasOwnProperty(''ignore'')){ if(args.ignore.length > 0){ ignore = args.ignore; } } } // get dataSource of grid and columns of grid var fields = [], filter = this.dataSource.filter(), col = this.columns; if( $.isEmptyObject(filter) || $.isEmptyObject(filter)) return; // Create array of Fields to remove from filter and apply ignore fields if exist for(var i = 0, l = col.length; i < l; i++){ if(col[i].hasOwnProperty(''field'')){ if(ignore.indexOf(col[i].field) === -1){ fields.push(col[i].field) } } } // MODIFY THIS PART END if($.isEmptyObject(fields)) return; // call "private" method var newFilter = this._eraseFiltersField(fields, filter) // set new filter this.dataSource.filter(newFilter); }

Y aquí está el segundo método. Está separado porque puede ser llamado recursivamente:

kendo.ui.Grid.prototype._eraseFiltersField = function(fields, filter){ for (var i = 0; i < filter.filters.length; i++) { // For combination ''and'' and ''or'', kendo use nested filters so here is recursion if(filter.filters[i].hasOwnProperty(''filters'')){ filter.filters[i] = this._eraseFiltersField(fields, filter.filters[i]); if($.isEmptyObject(filter.filters[i])){ filter.filters.splice(i, 1); i--; continue; } } // Remove filters if(filter.filters[i].hasOwnProperty(''field'')){ if( fields.indexOf(filter.filters[i].field) > -1){ filter.filters.splice(i, 1); i--; continue; } } } if(filter.filters.length === 0){ filter = {}; } return filter; }

Para su problema, puede modificar el método clearFilters para tomar el argumento del nombre del campo para borrar del filtro ("fld_32"). Entonces este campo se puede insertar en el parámetro _eraseFiltersField en lugar de fileds de grilla.