Ecco una domanda di dettagli di implementazione per i guru JavaScript.Implementazione di una tabella di decisioni complicata in JavaScript
Ho un'interfaccia utente con un numero di campi in cui i valori dei campi dipendono in modo complicato dai valori di sette bit di input. Esattamente ciò che dovrebbe essere visualizzato per uno qualsiasi dei 128 valori che sta cambiando regolarmente man mano che gli utenti vedono più applicazioni?
In questo momento, ho per questo essere implementato come un albero di decisione attraverso un pettine if-then-else, ma è fragile, secondo le norme e modifiche sorta di difficile da ottenere.
approccio Un'implementazione Ci ho pensato è quello di rendere un array di valori da 0x0 a 0x7F e quindi memorizzare una chiusura in ogni sede -
var tbl; // initialize it with the values
...
tbl[0x42] = function(){ doAThing(); doAnotherThing(); }
e poi richiamare con
tbl[bitsIn]();
Questo, almeno, rende la logica decisionale un insieme di compiti.
Domanda: c'è un modo migliore?
(Update:? Holy crap, com'è andata quella linea di 'tag iphone ajax' arrivare lì Non c'è da stupirsi che fosse un po 'sconcertante.)
Aggiornamento
Allora cosa è successo ? Fondamentalmente ho preso una quarta opzione, anche se simile a quella che ho controllato. La logica era sufficientemente complessa che alla fine ho creato un programma Python per generare una tabella di verità nel server (generazione del codice Groovy, infatti, l'host è un'applicazione Grails) e spostare completamente la logica decisionale nel server. Ora il lato JavaScript interpreta semplicemente un oggetto JSON che contiene i valori per i vari campi.
Alla fine, questo sarà probabilmente passare attraverso un'altra iterazione, e diventare dati in una tabella di database, indicizzati dal vettore di bit.
La parte trainata da tavolo è sicuramente stata la strada da percorrere; ci sono già state una mezza dozzina di nuove modifiche nei requisiti specifici per la visualizzazione.
Da quello che ho capito del problema, i vostri pensieri sono refactoring del suono, ma TBH ho Non sono sicuro della tua descrizione, di cosa hai bisogno: P –
Ogni bit determina un'azione specifica? Se è così, perché non eseguire un AND bit sul valore rispetto a [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40] – draeton
@Martin, il punto è se c'è un altro, più flessibile, modo di farlo rispetto alla mia tabella di lambda. –