Columnas Miller basadas en JavaScript del lado del cliente

Fondo

Miller Columns describe un diseño de interfaz de usuario para navegar y editar listas jerárquicas . Algunas implementaciones notables incluyen:

Problema

Hay una serie de problemas con estas implementaciones.

Frederic Hardy

Demostración y código . Esto es casi perfecto, el problema principal es que la jerarquía no se puede configurar de antemano. Idealmente, el código JSON se parecería a:

{ 'id': 'ID1', 'name': 'Name2', 'parent': false },
{ 'id': 'ID2', 'name': 'Name2', 'parent': 'ID1' },

Donde el segundo elemento ('ID2') se refiere a su ID principal ('ID1'). Desafortunadamente, el 'parent'parámetro toma un booleano para indicar si existe o no un padre. Esto significa que usar la biblioteca requiere registrar eventos e implementar los datos de la jerarquía como archivos separados (solicitudes), por lo que sé.

cristian yates

Demostración y código . Parece tener algunos errores graves (p. ej., al hacer clic en una categoría sin elementos secundarios, aparece un elemento secundario en la siguiente columna). Sin ganchos para operaciones de creación/actualización/eliminación.

jonathan bien

Demostración y código . Los problemas abundan: interfaz de usuario incómoda (navegación por teclado usando el enfoque del campo de entrada), no estructurada en un diseño de varias columnas, gran cantidad de archivos de biblioteca JS para incluir, sin enlaces para operaciones de creación/actualización/eliminación.

Implementaciones adicionales

Otras implementaciones que están cargadas de problemas:

Pregunta

Qué biblioteca de JavaScript cumple con los siguientes criterios:

  • lee un documento JSON completo en forma jerárquica (XML o HTML también son adecuados);
  • crea una interfaz de usuario con columnas dinámicas;
  • documentado de forma completa y precisa (en términos de API y CSS);
  • tiene un botón "atrás" o una barra de desplazamiento horizontal para manejar cualquier número de columnas;
  • ofrece eventos para operaciones de creación/actualización/eliminación;
  • puede actualizar su interfaz de usuario cambiando una plantilla CSS;
  • funciona en todos los principales navegadores (IE10+),
  • opcionalmente, tiene una función de búsqueda (con o sin expresiones regulares); y
  • Qué es el software libre y de código abierto?

Vanilla JS, jQuery, MooTools o Closure están bien.

Respuestas (1)

Después de una búsqueda exhaustiva, no apareció ningún software Miller Columns convenientemente simple. Aquí está mi software que tiene la funcionalidad especificada:

Las operaciones de edición son igualmente triviales:

$(document).ready( function() {
  $.getScript( "js/columns.js", function() {
    var $current;

    $("div.columns").millerColumns({
      current: function( $item ) {
        $current = $item;
      }
    });

    /** Called when an edit link is clicked. */
    update = function( link, def, undef ) {
      $(link).on( "click", function( event ) {
        event.preventDefault();

        ($current === undefined) ?
          typeof undef === "function" && undef() :
          typeof def === "function" && def();

        return false;
      });
    }

    update( "#new",
      function() {
        console.log( "new child of: " + $current );
      },
      function() {
        console.log( "new root sibling" );
      }
    );

    update( "#edit",
      function() {
        console.log( "edit" );
      }
    );

    update( "#del",
      function() {
        console.log( "delete" );
      }
    );
  });
});