Aquí hay una pregunta de detalles de implementación para los gurús de JavaScript.Implementación de una tabla de decisiones complicadas en JavaScript
Tengo una IU con una serie de campos en los que los valores de los campos dependen de manera complicada de los valores de siete bits de entradas. Exactamente qué se debe mostrar para cualquiera de los posibles 128 valores que cambian regularmente a medida que los usuarios ven más de la aplicación.
En este momento, he implementado esto como un árbol de decisiones a través de un peine if-then-else, pero es frágil en virtud de los cambios de requisitos y algo difícil de conseguir.
enfoque Una aplicación que he pensado es hacer una matriz de valores de 0x0 a 0x7F y luego almacenar un cierre en cada lugar -
var tbl; // initialize it with the values
...
tbl[0x42] = function(){ doAThing(); doAnotherThing(); }
y después invocarlos con
tbl[bitsIn]();
Esto, al menos, hace que la lógica de decisión se convierta en un conjunto de tareas.
Pregunta: ¿hay una manera mejor?
(Actualización:? Santa mierda, ¿cómo esa línea sobre 'Etiquetas Protectores ajax' entra ahí No es de extrañar que era un poco desconcertante.)
actualización
Entonces, ¿qué sucedió ? Básicamente tomé una cuarta opción, aunque similar a la que he comprobado. La lógica era lo suficientemente compleja como para que finalmente construyera un programa Python para generar una tabla de verdad en el servidor (generando el código Groovy, de hecho, el host es una aplicación Grails) y mover la lógica de decisión al servidor por completo. Ahora el lado de JavaScript simplemente interpreta un objeto JSON que contiene los valores para los diversos campos.
Eventualmente, esto probablemente pasará por una iteración más y se convertirá en datos en una tabla de base de datos, indexada por el vector de bits.
La parte accionada por mesa definitivamente resultó ser el camino a seguir; ya ha habido una media docena de nuevos cambios en los requisitos específicos para la pantalla.
por lo que entiendo de su problema, sus pensamientos son de refactorización sonido, pero TBH i No estoy seguro de su descripción, qué es lo que necesita: P –
¿Cada bit determina una acción específica? Si es así, ¿por qué no realizar un Y a nivel de bit en su valor contra [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40] – draeton
@Martin, el punto es si hay otra manera más flexible de hacer esto que mi tabla de lambdas –