2011-10-07 21 views
12

Estoy trabajando en una aplicación que necesita un formulario que le permita al usuario administrar una jerarquía de categorías de productos que vayan a una profundidad arbitraria. Puedo acceder fácilmente a los datos en la página, pero estoy un poco perdido en cuanto a lo que tengo que hacer para que funcione con backbone.js. Básicamente, estoy buscando UL anidados. Cuando el usuario selecciona uno, quiero que ellos puedan editar/eliminar la categoría o agregar otra categoría debajo de ella.Backbone.js y hierarchies/trees

Tengo problemas para encontrar casos en línea donde alguien tiene una jerarquía arbitrariamente profunda del mismo tipo de datos en backbone.js. ¿Acabo de hacer que mi clase de modelo contenga una instancia de mi clase de colección? ¿Cómo se lograría el ahorro? Sé que esta es una pregunta un poco amplia, pero principalmente necesito algunas sugerencias generales sobre cómo abordar esto (o mejor aún, una muestra en algún lugar que no he buscado).

+0

Los elementos de la hoja son productos en sí? – papdel

+0

No había pensado en hacer eso, pero ahora que lo mencionas, la interfaz será aún más útil. Solo estaba tratando de obtener algo para administrar la jerarquía de categorías por el momento. –

Respuesta

5

Puede modelar un árbol como una colección de elementos con enlaces padre-hijo. Así que su modelo debe tener algo como esto:

 id:   id, 
     parent_id: parent_id 

luego construir un árbol de una colección mediante llamadas a funciones recursivas en JS. Aquí es una pieza de código en vivo:

function buildTree(branch, list) { 
    //recursively builds tree from list with parent-child dependencies 
    if (typeof branch == 'undefined') return null; 
    var tree = []; 
    for(var i=0; i<branch.length; i++)  
    tree.push({ 
     item: branch[i], 
     children: buildTree(list[ branch[i].id ], list) 
    }); 
    return tree; 
} 

Antes de llamar a los elementos del grupo de función por parent_id usando underscore.js (que es un requisito previo para Backbone.js de todos modos), y luego llamar a:

var list = _.groupBy(arrayOfItems,'parent_id'); 
    var tree = buildTree(list[0],list); 

Finalmente, renderice el árbol usando llamadas a funciones recursivas nuevamente (no hay ningún ejemplo aquí, pero creo que entendió la idea).

PS. Agregar/guardar un elemento no debería ser un problema si indica el derecho de parent_id.

+0

¡Gran solución, gracias! – Casey

0

Puede encontrar la respuesta en este enlace.

Backbone with a tree view widget

usted tiene muchas maneras de crear árbol jerárquico. Uno de ellos lo publiqué en mi pregunta. Si quieres, pruébalo! Usé Backbone.js y Epoxy.js para crearlo. Enlace a Epoxy.js

http://epoxyjs.org/index.html

Esta librería proporciona fácilmente para unir diferentes eventos Composición de árboles