Filtrar los datos mostrados por YUI DataTable 3
01 de marzo 2011 a las 1:39 pm por Juan Lindal | En Desarrollo , YUI 3 Galería | 4 comentariosAdemás de la clasificación, que es apoyada por YUI DataTable 3 , a menudo es útil ser capaz de filtrar los datos y mostrar un subconjunto de las filas disponibles. El Generador de consultas de flash en la Galería de YUI 3 ofrece una interfaz de usuario para la construcción de una expresión de filtro simple.
( Haga clic en la pantalla y jugar con este ejemplo .)
Historia
La primera versión fue escrita por un colega que trabaja conmigo en la red de Yahoo! Publisher (YPN). (. Salió poco después de intentar un empleo honesto con el precedente sentado por Jamie Zawinski, abrió un bar para vender cerveza -. De elaboración casera, nada menos, pero estoy divagando ...) Después de cortar juntos la primera versión de Query Builder, que hizo el error de mostrar a mí. Unos días más tarde, se quejó: "Usted reescribió todo el asunto!" De hecho, lo he reescrito varias veces en los últimos años. YPN se ha ido, pero la última versión de YUI dos poderes Query Builder todas las tablas de datos de APT , la plataforma de Yahoo pantalla de gestión de la publicidad. El puerto de YUI 3 es en realidad la menos cantidad de trabajo que he tenido que hacer para generar una nueva versión!
¿Cómo funciona el ejemplo
El núcleo de este ejemplo es (1) la configuración del generador de consultas que especifica cómo el usuario puede filtrar los datos y (2) la extensión a Y.DataSource.Local que implementa el filtro. (Para la paginación del lado del servidor, que se envían los datos al servidor de filtro y se hornea en la consulta SQL.)
Para configurar el Generador de consultas, el primer ejemplo define una lista de las variables que se pueden filtrar:
var = INTO [ { nombre: 'title', Tipo: 'cadena', texto: 'Título' }, { nombre: 'Año', tipo: «número», texto: 'Año', validación: 'yiv enteros: [0,2100] " }, { nombre: 'cantidad', tipo: «número», texto: "Cantidad", validación: 'yiv enteros: [0],' } ];
Cada variable se le asigna un nombre (que se corresponda la clave en la configuración de la columna DataTable) y un tipo. Los tipos por defecto son 'cadena', 'número', y 'select', pero se puede extender mediante la creación de plugins personalizados ( ver más abajo ). Para cada tipo que se utiliza, también debe definir un conjunto de operadores:
var ops = { cadena: [ {Valor: 'contiene', text: 'Contiene'}, {Valor: 'comienza con', text: 'Inicia con'}, {Valor: 'termina con', text: 'termina con'} ], número: [ {Valor: 'igual', text: '='}, {Valor: 'less', text: '<='}, {Valor: 'mayor', text: '> ='} ] };
Esto especifica los operadores que el usuario puede aplicar a cada tipo de variable. (Si necesita diferentes conjuntos de operadores para las variables de tipo fundamental mismo, puede clonar el tipo. Consulte el Plugins siguiente sección.)
Y. FormManager se utiliza para validar los valores especificados por el usuario antes de aplicar el filtro. La clave de validación
para cada variable en la configuración de Query Builder proporciona datos sobre CSS que es interpretado por Y. FormManager.
Si todas las validaciones de paso, se envía una solicitud al origen de datos. La extensión a Y.DataSource.Local es bastante simple. Simplemente filtra los datos antes de volver a los resultados:
Y.extend (CustomDataSource, Y.DataSource.Local, { _defDataFn: function (e) { var data = FilterData (e.data, e.request.filter); var respuesta = { resultados: data.slice (e.request.recordOffset, e.request.recordOffset e.request.rowsPerPage +), meta: { totalRecords: data.length } }; this.fire ("respuesta", Y.mix ({respuesta: la respuesta}, e)); } });
El filter elemento de la solicitud se obtiene a partir QueryBuilder.toDatabaseQuery() , que devuelve una lista de [variable, operator, value] tuplas. También tenga en cuenta que la respuesta debe incluir información sobre el número total de registros, ya que los cambios basados en el filtro que se aplica.
filterData() simplemente recorre el tuplas de toDatabaseQuery() , aplicando el filtro de los operadores definidos en una tabla de dos niveles de búsqueda:
var = filtros { cadena: { contiene: function (valor, filtro) { retorno (value.indexOf (filtro)> = 0); }, 'Comienza con': function (valor, filtro) { retorno (value.substr (0, filter.length) == filtro); }, 'Termina con': function (valor, filtro) { retorno (value.substr (-filter.length) == filtro); } }, número: { igual: function (valor, filtro) { return (parseInt (valor, 10) == parseInt (filtro, 10)); }, menos: function (valor, filtro) { return (parseInt (valor, 10) <= parseInt (filtro, 10)); }, mayor: function (valor, filtro) { return (parseInt (valor, 10)> = parseInt (filtro, 10)); } } };
Después de todo esto, DataTable simplemente muestra lo que recibe de la fuente de datos.
Plugins
Y.QueryBuilder.plugin_mapping define la asignación de nombres de tipos de clases reales. Puede aumentar esta asignación de dos maneras:
- Clon de un tipo existente mediante la definición de un nuevo nombre para la misma clase. Esto permite que diferentes grupos de operadores de las distintas variables del tipo fundamental mismo.
- Crear un nuevo tipo mediante la implementación de la API de plugins . Estudiar el código fuente de los plugins existentes es la mejor manera de tener una idea de cómo funciona esta API.
Generalizar el Generador de consultas
Generador de consultas no admiten paréntesis, por lo que puede y todas las condiciones o O todas las condiciones. Si bien es posible la introducción de paréntesis en una representación gráfica de una expresión booleana, todos los diseños que he visto son demasiado difíciles de utilizar. Una representación textual es mucho más simple y más fácil de manipular. Generador de expresiones incorpora el Generador de consultas en un widget que permite la construcción de una representación textual, sin tener que recordar la sintaxis o todo tipo en la mano.
Compartir y ampliar: Marcar con del.icio.us | Digg it! | reddit!
4 Comentarios »
RSS feed para los comentarios de esta entrada. TrackBack URI
Deja un comentario

Copyright © 2006-2012 Yahoo! Inc. Todos los derechos reservados. Política de privacidad - Condiciones del Servicio
Desarrollado por WordPress en Yahoo! Web Hosting .


He conectado el ordenamiento de las columnas YUI DataTable y bombas de esto. ¿Es esto debido a la paginación o la tabla de filtros? ¿Ha sido probado por cualquier persona para trabajar con este cuadro?
http://developer.yahoo.com/yui/3/examples/datatable/datatable_sort.html
Cualquier ayuda sería muy apreciada.
Gracias
Comentario por Charles de Gaulle - 22 de abril 2011 #
La cuestión parece ser que Y.Plugin.DataTableSort no es compatible con Y.Plugin.DataTableDataSource. Y.Plugin.DataTableSort se enchufa en el conjunto de registros, así como la tabla de datos. Pero cada vez que la fuente de datos devuelve los datos, una nueva Y. RecordSet se crea, por lo que se pierde la conexión!
Tenga en cuenta que, incluso sin el error en YUI 3, Y.Plugin.DataTableSort no entiende la paginación en absoluto, por lo que no puede trabajar con este ejemplo.
Comentario por Juan Lindal - 25 de abril 2011 #
Hola Juan,
Gracias por la actualización.
Tengo una última pregunta para usted ...
Parece que el uso de "Y" sólo en el filtrado ... ¿Es posible conectar "o" la hora de seleccionar los múltiplos de un mismo campo?
Por ejemplo, quiero devolver todos los registros que comienzan con "P" en el campo "Título" y todos los registros que comienzan con "T" en el campo "Título".
Esto actualmente devuelve 0 registros. ¿Hay alguna solución o plugin se podría usar que reconocer esto y utilizar el operador "OR" en los múltiples campos mismas comienzan utiliza?
Gracias por su tiempo.
Comentario por Charles de Gaulle - 27 de abril 2011 #
El ADN es el código de ejemplo. Puede modificar FilterData () y su ayudante, applyFilter (), a implementar o en su lugar.
Comentario por Juan Lindal - 27 de abril 2011 #