Un "widget" scripté peut-il être converti en classe?Cette discussion et les scripts joints ont été instigués par:
J'ai voté pour le souhait de Vince pour un TextEditBox autocompleter car il était similaire à mon "souhait" pour un intégré ListBox filtre. J'avais programmé des interfaces utilisateur (dialogues / fenêtres) offrant des fonctionnalités similaires pour les deux éléments. Cependant, j’ai décidé d’essayer de créer une fonction pour construire automatiquement ces "widgets" et, une fois réussi, de déterminer si Classe peut être défini pour prendre la place d'une fonction.
Il y a 3 scripts attachés:
- TEB_LB_Widget.jsl - Ce script définit les fonctions de support et deux fonctions principales pour construire ces widgets: MakeLBFilter () et MakeTEBSelector () .
- TestMakeLBFilter.js l - Ce script inclut le script ci-dessus (vous devez changer le chemin d'accès à l'emplacement de ce script), crée ensuite une fenêtre simple avec deux listes déroulantes différentes, puis crée un filtre de zone de liste pour chacune. Notez que le script contient des instructions d'attente, uniquement à des fins de démonstration. Il y a plusieurs cas de test au bas du script. (Extrait de code et affichage illustrés ci-dessous.)
- TestTEBSelector.jsl - Ceci est similaire au script 2. Vérifiez le chemin inclus. Ce widget est moins développé.
Des fonctionnalités supplémentaires pourraient être ajoutées aux deux widgets, mais j'ai décidé de poursuivre la question de savoir si chaque widget et ses fonctionnalités peuvent être créés en tant qu'instances d'une classe définie par l'utilisateur.
J'ai lu la discussion Exemples JSL orientés objet 18/08/2016. La syntaxe n'a toujours pas "cliqué" avec moi, et je cherche des indications sur:
- Peut-on utiliser une classe JMP pour définir un widget d'objet? Dans ce cas, la classe a besoin d'un objet existant (et probablement de son conteneur) et d'une fonction pour ajouter un nouvel objet et, dans chaque cas, une liste.
- Si oui, un cours est une meilleure solution et si quelqu'un a un exemple simple ou un lien vers une documentation autre que celle incluse dans le lien 2016, je vous en serais reconnaissant. Ensuite, je poursuivrai la conversion. J'ajoute des noms, issus de la discussion de 2016: @drewfoglia , @Phil_Brown , @msharp
@vince_faller , Je suis d’accord avec votre liste de souhaits, un système intégré serait préférable. Cependant, il serait bon de savoir comment prototyper de nouveaux exemples.
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>
Pas de texte - liste complète affichée
Left utilise "contient", right utilise "commence par"
Re: Un "widget" scripté peut-il être converti en classe?Mise à jour: La syntaxe a finalement du sens, et j'ai créé des instances d'objets de classe. J'ai donc répondu à ma question. la réponse est oui.
Je mettrai à jour ce post pour définir et utiliser des classes appelées LBFilter et TEBSelector, une fois que les fonctions et les méthodes sont scriptées. Je trouve la syntaxe de classe JMP14 plus facile à utiliser.
Re: Un "widget" scripté peut-il être converti en classe?Vous n'avez pas le temps de creuser cela, mais depuis le moment de cette conversation en 2016, JMP 14 a introduit la POO à JSL avec des cours. Je recommandais auparavant de ne pas implémenter la programmation orientée objet dans JSL et les méthodes suggérées dans ce post plus ancien étaient très compliquées. À mon avis, ils étaient plus un exercice pour déterminer si cela pouvait être fait que pour créer un code de niveau de production. Je souhaite seulement officiellement revenir sur cette opinion maintenant que JMP 14 prend en charge les classes et la programmation orientée objet, et que les méthodes intégrées seront mieux utilisées. Il semble que vous ayez déjà compris cela. La POO devrait être une excellente méthodologie pour créer des widgets définis par l'utilisateur. Je suis intéressé à voir votre produit final.
Re: Un "widget" scripté peut-il être converti en classe?@gzmorgan,
Une fois que vous avez fini de comprendre, si vous pouvez mettre à jour et me taguer sur la mise à jour. Je l'apprécierais beaucoup. J'adorerais vraiment faire des cours de levrage avec JSL et j'aimerais pouvoir apprendre de votre exercice d'apprentissage.
Re: Un "widget" scripté peut-il être converti en classe?Donc, je pense toujours que les classes ont besoin de travail. Sous-classer / hériter semble être un peu bizarre. Il n'y a pas d'auto-référence native dans la classe; les méthodes utilisant des zones d'affichage ne peuvent donc pas utiliser leurs fonctions avec les attributs de classe. Mais il y a des solutions autour des choses qui @Justin_Chilton montré ici . Basé sur cela, j'ai fait Autocompleter.
Mais je l'ai aussi fonctionnellement en utilisant completer_box.jsl. Et selon ce , Les espaces de noms spéciaux autoriseront les appels d’espace de noms. Je l’ai donc également fait avec la boîte de contexte. Personnellement pour le moment, j'aime bien la méthode de la boîte de contexte.
Re: Un "widget" scripté peut-il être converti en classe? @vince_faller , votre script AutoCompleter utilisant des classes JMP était très instructif. Je n’ai pas eu le temps de travailler sur mon scénario il ya environ une heure et j’ai heurté un mur immédiatement. J'ai décidé de faire référence à vos liens suggérés et j'ai vu votre réponse. La clé de votre code pour me sortir de mon coin utilisait self et obj = Expr (self).
<<SET text="" changed=""></SET>
Je ne savais pas trop comment faire référence à la classe de propriétaire pour << Set Text Changed (). Très agréable!
Et j'ai trouvé ça Guide de script JMP texte de présentation relatif à l’objet JMP Class assez déroutant (page 293):
Remarques:
• Toutes les méthodes, variables membres et fonctions sont publiques.
• Les fonctions définies dans une classe ne peuvent pas accéder aux variables ou méthodes de la méthode.
classe.
Je pense que j'aurais été coincé pendant longtemps sans votre exemple. Cela vaut 5 Kudos!