Hier ist eine Implementierungsdetailfrage für JavaScript-Gurus.
Ich habe eine UI mit einer Anzahl von Feldern, in denen die Werte der Felder in komplizierter Weise von den Werten von sieben Bits der Eingaben abhängen. Was genau sollte für einen der möglichen 128 Werte angezeigt werden, die sich regelmäßig ändern, wenn Benutzer mehr von der Anwendung sehen?
Im Moment habe ich dies als einen Entscheidungsbaum durch einen Wenn-dann-sonst-Kamm implementiert, aber es ist spröde unter den Anforderungen Änderungen und Art von schwer, richtig zu bekommen.
Ein Implementierungsansatz, über den ich nachgedacht habe, ist, ein Array von Werten von 0x0 bis 0x7F zu erstellen und dann an jedem Ort eine Schließung zu speichern -
%Vor%und rufen Sie sie dann mit
auf %Vor%Dies macht zumindest die Entscheidungslogik zu einer Reihe von Aufgaben.
Frage: Gibt es einen besseren Weg?
(Update: Heiliger Mist, wie ist die Zeile über 'ajax iphone tags' da hinein gekommen? Kein Wunder, dass es ein wenig rätselhaft war.)
Aktualisieren
Was ist passiert? Im Grunde nahm ich eine vierte Option, obwohl ich der ähnlich war, die ich überprüft habe. Die Logik war so komplex, dass ich schließlich ein Python-Programm erstellte, um eine Wahrheitstabelle auf dem Server zu generieren ( Groovy Code, in der Tat ist der Host eine Grails -Anwendung und verschieben Sie die Entscheidungslogik vollständig in den Server . Jetzt interpretiert die JavaScript-Seite einfach ein JSON-Objekt, das die Werte für die verschiedenen Felder enthält.
Schließlich wird dies wahrscheinlich noch eine weitere Iteration durchlaufen und zu Daten in einer Datenbanktabelle werden, indiziert durch den Vektor von Bits.
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.
Haben Sie daran gedacht, Ihren Entscheidungsbaum auf dem Server zu generieren, anstatt ihn manuell zu schreiben? Verwenden Sie welche Darstellung sauber ist, einfach zu arbeiten und zu modifizieren und dann kompilieren Sie diese auf hässliche und dennoch effiziente Javascript für die Client-Seite.
Ein Entscheidungsbaum ist relativ einfach als Daten darzustellen, und er ist einfach zu verstehen und arbeitet mit einer traditionellen Baumdatenstruktur. Sie können diesen Baum in der für Sie sinnvollen Form speichern. Validieren und ändern Sie es als Daten sollten auch einfach sein.
Wenn Sie den Entscheidungsbaum verwenden müssen, kompilieren / serialisieren Sie ihn einfach als großes if-the-else-, switch- oder Hash-Chaos in JavaScript. Dies sollte auch ziemlich geradlinig und wahrscheinlich viel einfacher als der Versuch sein, ein switch
mit ein paar hundert Elementen zu erhalten.
Ich sehe zwei Optionen ...
Für beide Lösungen gelten die folgenden Funktionen:
%Vor%Der Wechselweg
%Vor%Der Kartenweg
%Vor%In beiden Fällen würden Sie
anrufen %Vor%Da die Situation (wie Sie beschrieben haben) so unregelmäßig ist, scheint es keinen besseren Weg zu geben. Trotzdem kann ich eine Verbesserung Ihres Sprungtisches vorschlagen. Sie haben erwähnt, dass Sie Fehler und Duplikate haben. Anstatt sie explizit einem Abschluss zuzuordnen, können Sie sie also benannten Funktionen zuweisen, sodass Sie den expliziten Abschluss nicht duplizieren müssen.
%Vor%Nicht so sehr eine Verbesserung, aber es ist das einzige, was ich mir vorstellen kann! Sie scheinen die meisten anderen Themen abgedeckt zu haben. Da es so aussieht, als ob sich die Anforderungen so sehr ändern, denke ich, dass Sie auf Eleganz verzichten müssen und ein Design haben müssen, das nicht so elegant ist, aber immer noch leicht zu ändern ist.
Ich habe ein grobes Beispiel eines JavaScript-Entscheidungsbaum-Tools, wenn Sie einen Blick darauf werfen wollen:
Tags und Links javascript