Hier ist eine Implementierungsdetails-Frage für JavaScript-Gurus.Implementieren einer komplizierten Entscheidungstabelle in JavaScript
Ich habe eine Benutzeroberfläche mit einer Anzahl von Feldern, in denen die Werte der Felder in einer komplizierten Weise auf die Werte von sieben Bits der Eingänge abhängen. Was genau sollte für einen der möglichen 128 Werte angezeigt werden, der sich regelmäßig ändert, wenn Benutzer mehr von der Anwendung sehen?
Gerade jetzt, ich habe für diese als Entscheidungsbaum durch eine Wenn-dann-sonst-Kamm implementiert, aber es ist spröde unter den Anforderungen Änderungen und Art von schwer zu bekommen richtig.
Eine Implementierung Ansatz, den ich darüber nachgedacht habe, ist ein Array von Werten von 0x0 bis 0x7F und speichern Sie dann einen Verschluss an jedem Ort zu machen -
var tbl; // initialize it with the values
...
tbl[0x42] = function(){ doAThing(); doAnotherThing(); }
und dann rufen Sie mit
tbl[bitsIn]();
Dies macht zumindest die Entscheidungslogik in eine Reihe von Aufgaben.
Frage: Gibt es einen besseren Weg?
(Update: holy crap, wie würde diese Zeile über 'Ajax iphone Tags' erhalten dort Kein Wunder, war es ein wenig rätselhaft.)
aktualisieren
Also, was passiert ist ? Im Grunde nahm ich eine vierte Option, obwohl ich der ähnlich war, die ich überprüft habe. Die Logik war ausreichend komplex, dass ich schließlich ein Python-Programm erstellte, um eine Wahrheitstabelle auf dem Server zu erzeugen (Groovy Code zu erzeugen, tatsächlich ist der Host eine Grails-Anwendung) und die Entscheidungslogik vollständig in den Server zu verschieben. Jetzt interpretiert die JavaScript-Seite einfach ein JSON-Objekt, das die Werte für die verschiedenen Felder enthält.
Schließlich wird dies wahrscheinlich eine weitere Iteration durchlaufen und zu Daten in einer Datenbanktabelle werden, indiziert durch den Bitvektor.
Der tischgetriebene Teil erwies sich als der richtige Weg; Es gab bereits ein halbes Dutzend neue Änderungen in den spezifischen Anforderungen für die Anzeige.
Von dem, was ich von Ihrem Problem zu verstehen, sind Ihre Refactoring Gedanken klingen, aber TBH i Ich bin mir nicht sicher aus Ihrer Beschreibung, was Sie brauchen: P –
Bestimmt jedes Bit eine bestimmte Aktion? Wenn ja, warum nicht ein bitweises UND auf Ihrem Wert gegen [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40] – draeton
@Martin, der Punkt ist, ob es eine andere, flexiblere Art und Weise, dies als meine Tabelle zu tun von Lambda. –