Kann ein Skript-Widget in eine Klasse konvertiert werden?Diese Diskussion und die beigefügten Skripte wurden initiiert von:
Ich habe für Vince's Wunsch nach einem gestimmt TextEditBox Autocompleter, da es meinem "Wunsch" nach einem eingebauten ähnelt ListBox Filter. Ich hatte spezifische Benutzeroberflächen (Dialoge / Fenster) programmiert, die eine ähnliche Funktionalität für beide Elemente erzielten. Ich beschloss jedoch, eine Funktion zu erstellen, um diese "Widgets" automatisch zu erstellen. Wenn dies erfolgreich war, sollten Sie feststellen, ob a Klasse kann definiert werden, um den Platz einer Funktion einzunehmen.
Es sind 3 Skripte beigefügt:
- TEB_LB_Widget.jsl - Dieses Skript definiert unterstützende Funktionen und zwei Hauptfunktionen zum Erstellen dieser Widgets: MakeLBFilter () und MakeTEBSelector () .
- TestMakeLBFilter.js l - Dieses Skript enthält das obige Skript (Sie müssen den Pfad in den Speicherort dieses Skripts ändern), erstellt dann ein einfaches Fenster mit zwei verschiedenen Listenfeldern und erstellt für jedes ein Listenfeldfilter. Beachten Sie, dass das Skript nur zu Demonstrationszwecken Wait-Anweisungen enthält. Am Ende des Skripts befinden sich mehrere Testfälle. (Code-Snippet und Anzeige unten angezeigt.)
- TestTEBSelector.jsl - Dies ist ähnlich wie bei Skript 2. Überprüfen Sie den angegebenen Pfad. Dieses Widget ist weniger entwickelt.
Für beide Widgets konnten zusätzliche Funktionen hinzugefügt werden. Ich entschied mich jedoch für die Frage, ob jedes Widget und seine Funktionen als Instanzen einer benutzerdefinierten Klasse erstellt werden können.
Ich habe die Diskussion gelesen Objektorientierte JSL-Beispiele 18.08.2016. Die Syntax hat bei mir immer noch nicht "geklickt" und ich suche nach Richtung auf:
- Kann eine JMP-Klasse zum Definieren eines Objektwidgets verwendet werden? In diesem Fall benötigt die Klasse ein vorhandenes Objekt (und wahrscheinlich dessen Container) und eine Funktion, um ein neues Objekt und jeweils eine Liste hinzuzufügen.
- Wenn ja, ist eine Klasse der bessere Weg, und jemand hat ein einfaches Beispiel oder einen Link zu einer anderen Dokumentation als der, die in dem Link für 2016 enthalten ist. Ich würde es begrüßen. Dann werde ich die Bekehrung verfolgen. Ich füge Namen aus der Diskussion 2016 hinzu: @drewfoglia . @Phil_Brown . @msharp
@ vince_faller Ich stimme mit Ihrer Wunschliste überein, ein eingebautes wäre am besten. Es wäre jedoch schön zu wissen, wie man neue Beispiele prototypen kann.
Names Default to Here(1);
Include("C:\temp\TEB_LB_Widget.jsl");
myList1 = {"cat", "dog", "head", "cow", "heel", "help"};
dt = Open("$sample_data/semiconductor capability.jmp",Invisible);
myList2 = dt << get column names("Continuous", "string");
nw = New Window( "Example ListBox Filter",
HListBox(
VlistBox(
lb1 = ListBox(mylist1,
<<SET size=""></SET>
Kein Text - vollständige Liste wird angezeigt
Links verwendet "Enthält", rechts verwendet "Beginnt mit"
Re: Kann ein Skript-Widget in eine Klasse konvertiert werden?Update: Die Syntax macht endlich Sinn und ich habe Instanzen von Klassenobjekten erstellt. So habe ich meine Frage beantwortet; Die Antwort ist ja.
Ich werde diesen Beitrag aktualisieren, um Klassen zu definieren und zu verwenden, die als LBFilter und TEBSelector bezeichnet werden, sobald die Funktionen und Methoden ein Skript haben. Ich finde die JMP14-Klassensyntax einfacher zu verwenden.
Re: Kann ein Skript-Widget in eine Klasse konvertiert werden?Ich habe keine Zeit, um sich damit zu beschäftigen, aber seit der Unterhaltung im Jahr 2016 hat JMP 14 OOP mit Klassen in JSL integriert. Ich empfehle zuvor, OOP nicht in JSL zu implementieren, und die in diesem älteren Beitrag vorgeschlagenen Methoden waren sehr hackig. Meiner Meinung nach waren sie eher eine Übung, um zu bestimmen, ob dies getan werden kann, als eine Übung zur Erstellung von Code auf Produktionsniveau. Ich möchte diese Ansicht jetzt offiziell widerrufen, da JMP 14 Klassen und OOP unterstützt und die integrierten Methoden besser zu verwenden sind. Es scheint, dass Sie das bereits herausgefunden haben. OOP sollte eine hervorragende Methode sein, um benutzerdefinierte Widgets zu erstellen. Ich bin daran interessiert, Ihr Endprodukt zu sehen.
Re: Kann ein Skript-Widget in eine Klasse konvertiert werden?@gzmorgan,
Wenn Sie damit fertig sind, können Sie es aktualisieren und mich für das Update kennzeichnen. Ich würde es sehr begrüßen. Ich würde auf jeden Fall gerne mit JSL beleben und ich würde gerne von Ihrer Lernübung lernen.
Re: Kann ein Skript-Widget in eine Klasse konvertiert werden?Ich denke immer noch, dass die Klassen etwas Arbeit brauchen. Subklassifizierung / Vererbung scheint ein bisschen wackelig zu sein. Es gibt keinen nativen Selbstverweis in der Klasse, sodass für Funktionen, die Anzeigefelder verwenden, keine der Klassenattribute verwendet werden kann. Aber es gibt Arbeit an den Dingen @Justin_Chilton gezeigt Hier . Basierend darauf habe ich Autocompleter gemacht.
Aber ich habe es auch funktional mit completer_box.jsl gemacht. Und laut diese , spezielle Namespaces lassen Namespace-Aufrufe zu, daher habe ich es auch mit dem Kontextfeld erstellt. Persönlich im Moment gefällt mir die Kontext-Box-Methode am besten.
Re: Kann ein Skript-Widget in eine Klasse konvertiert werden? @ vince_faller Ihr AutoCompleter-Skript, das JMP-Klassen verwendet, war sehr informativ. Ich hatte erst vor etwa einer Stunde Zeit, an meinem Skript zu arbeiten, und ich stieß sofort gegen eine Wand. Ich beschloss, auf Ihre vorgeschlagenen Links zu verweisen und Ihre Antwort zu sehen. Der Schlüsselteil Ihres Codes, um mich aus meiner Ecke zu bringen, war self und obj = Expr (self).
<<SET text="" changed=""></SET>
Ich war mir nicht sicher, wie ich für << Set Text Changed () auf die Besitzerklasse verweisen sollte. Sehr schön!
Und ich habe das gefunden JMP-Skripthandbuch Verwirrung bezüglich des JMP-Klassenobjekts (Seite 293):
Anmerkungen:
• Alle Methoden, Member-Variablen und Funktionen sind public.
• Innerhalb einer Klasse definierte Funktionen können nicht auf Methodenvariablen oder Methoden innerhalb der Klasse zugreifen
Klasse.
Ich glaube, ich wäre schon lange ohne Ihr Beispiel festgefahren. Das ist 5 Kudos wert!