SOLUCIONADO: Filas de un ML como "cascada" de una superior

Hola! Quería saber si habia forma de que, teniendo por ejemplo un ML con 10 filas, conteniendo tuplas tal que varias pueden estar subordinadas a una “superior”, de forma tal que, por ejemplo:

  • Las filas 1,5-10 son independientes.
  • Pero la fila 2 es “dueña” de las filas 3 y 4.
    Entonces, dependiendo del valor de la fila 2 muestre u oculte las filas 3 y 4.
    Es posible un comportamiento como este?
    Tengo asumido que no, pero puede estar escapándoseme algo.
    Mil gracias por cualquier idea que se les ocurra!

Hola Martin,

el comportamiento es posible, mientras que hagas las funciones en JS que implementen la logica necesaria no hay problema.

Saludos

Gracias! pude resolverlo.

Dejo el ejemplo con la solución.
Se adjunta imagen con la definición de la operación sobre la que se planteó el ejemplo.
Agradecería cualquier comentario que pudiera mejorar la eficiencia o corregir cualquier posible error. JS no es mi fuerte.

Código ci:

<?php
class prueba extends toba_ci
{
	function conf__formulario_ml(toba_ei_formulario_ml $form_ml)
	{
		$datos = array();
		$datos[0]['subordinado'] = '<font size=4><b>»</b></font>';
		$datos[1]['subordinado'] = null;
		$datos[2]['subordinado'] = null;
		$datos[3]['subordinado'] = '<font size=4><b>»</b></font>';
		$datos[4]['subordinado'] = '<font size=4><b>»</b></font>';
		$datos[5]['subordinado'] = '<font size=4><b>»</b></font>';
		$datos[6]['subordinado'] = null;
		$datos[0]['id_item'] = '1';
		$datos[1]['id_item'] = '2';
		$datos[2]['id_item'] = '3';
		$datos[3]['id_item'] = '4';
		$datos[4]['id_item'] = '5';
		$datos[5]['id_item'] = '6';
		$datos[6]['id_item'] = '7';
		$datos[0]['nombre'] = 'Nombre de opcion 1';
		$datos[1]['nombre'] = 'Subopcion 1.1';
		$datos[2]['nombre'] = 'Subopcion 1.2';
		$datos[3]['nombre'] = 'Nombre de opcion 2';
		$datos[4]['nombre'] = 'Nombre de opcion 3';
		$datos[5]['nombre'] = 'Nombre de opcion 4';
		$datos[6]['nombre'] = 'Subopcion 4.1';
		$datos[0]['valor'] = '3';
		$datos[1]['valor'] = null;
		$datos[2]['valor'] = '1';
		$datos[3]['valor'] = '3';
		$datos[4]['valor'] = '3';
		$datos[5]['valor'] = '2';
		$datos[6]['valor'] = '2';
		$form_ml->set_datos($datos);
	}
}
?>

Código extensión ml:

<?php
class prueba_ml extends toba_ei_formulario_ml
{
	function extender_objeto_js()
	{
		echo "
		//---- Procesamiento de EFs --------------------------------

		{$this->objeto_js}.evt__valor__procesar = function(es_inicial, fila)
		{
			if (es_inicial) {
				if (fila != 0) {
					if (!this.ef('subordinado').ir_a_fila(fila).tiene_estado()) {
						fila_origen = fila;
						fila--;
						while (fila >= 0 && !this.ef('subordinado').ir_a_fila(fila).tiene_estado()) {
							fila--;
						}
						if (this.ef('valor').ir_a_fila(fila).get_estado() != 2) {
							this.ef('valor').ir_a_fila(fila_origen).resetear_estado();
							this.ef('valor').ir_a_fila(fila_origen).desactivar();
						}
					}
				}
			} else {
				valor = this.ef('valor').ir_a_fila(fila).get_estado();
				fila++;
				while (fila < this._filas.length && !this.ef('subordinado').ir_a_fila(fila).tiene_estado()) {
					if (valor != 2) {
						this.ef('valor').ir_a_fila(fila).resetear_estado();
						this.ef('valor').ir_a_fila(fila).desactivar();
					} else {
						this.ef('valor').ir_a_fila(fila).activar();
					}
					fila++;
				}
			}
		}
		";
	}
}
?>

filas_ML_en_cascada.PNG

filas_ML_en_cascada.PNG_thumb.png