¿Se puede convertir un "widget" en una clase?Esta discusión y los guiones adjuntos fueron instigados por:
Voté por el deseo de Vince por una TextEditBox autocompletador, ya que era similar a mi "deseo" de una función incorporada Cuadro de lista filtrar. Había programado IU específicas (diálogos / ventanas) logrando una funcionalidad similar para ambos elementos. Sin embargo, decidí intentar crear una función para construir automáticamente estos "widgets", y una vez que tenga éxito, determinar si un Clase Se puede definir para tomar el lugar de una función.
Hay 3 scripts adjuntos:
- TEB_LB_Widget.jsl - Este script define funciones de soporte y dos funciones principales para construir estos widgets: MakeLBFilter () y MakeTEBSelector () .
- TestMakeLBFilter.js l: esta secuencia de comandos incluye la secuencia de comandos anterior (deberá cambiar la ruta de acceso a la ubicación de esa secuencia de comandos), luego crea una ventana simple con dos cuadros de lista diferentes y luego crea un filtro de lista para cada uno. Tenga en cuenta que el script tiene sentencias de espera, solo para demostración. Hay varios casos de prueba en la parte inferior de la secuencia de comandos. (El fragmento de código y la pantalla se muestran a continuación.)
- TestTEBSelector.jsl - Esto es similar al script 2. Comprueba el camino ocluido. Este widget está menos desarrollado.
Ambos widgets podrían tener características adicionales agregadas, pero decidí continuar con la pregunta de si cada widget y sus características se pueden crear como instancias de una Clase definida por el usuario.
Leo la discusion Ejemplos orientados a objetos de JSL 18/08/2016. La sintaxis aún no ha "hecho clic" conmigo, y estoy buscando una dirección en:
- ¿Se puede usar una clase JMP para definir un widget de objeto? En este caso, la clase necesita un objeto existente (y probablemente su contenedor) y una función para agregar un nuevo objeto, y en cada caso una lista.
- Si es así, una clase es una mejor manera de ir, y alguien tiene un ejemplo simple o un enlace a la documentación que no se incluye en el enlace de 2016, lo agradecería. Entonces perseguiré la conversión. Estoy agregando nombres, de la discusión de 2016: @drewfoglia , @Phil_Brown , @msharp
@vince_faller , Estoy de acuerdo con su lista de deseos, una mejor opción sería una incorporada. Sin embargo, sería bueno saber cómo prototipo de nuevos ejemplos.
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>
Sin texto - se muestra la lista completa
La izquierda usa "Contiene", la derecha usa "Comienza con"
Re: ¿Se puede convertir un "widget" en una clase?Actualización: la sintaxis finalmente tiene sentido, y he creado instancias de objetos de clase. Así que he respondido mi pregunta; la respuesta es sí.
Actualizaré esta publicación para definir y usar clases llamadas LBFilter y TEBSelector, una vez que las funciones y los métodos estén programados. Encuentro la sintaxis de clase JMP14 más fácil de usar.
Re: ¿Se puede convertir un "widget" en una clase?No tengo tiempo para profundizar en esto, pero desde el momento de esa conversación en 2016, JMP 14 ha traído OOP a JSL con clases. Anteriormente recomendé no implementar OOP en JSL y los métodos sugeridos en esa publicación anterior eran muy intrépidos. En mi opinión, fueron más un ejercicio para determinar si se podría hacer en lugar de un ejercicio para crear un código de nivel de producción. Solo quiero retractarme oficialmente de esa opinión ahora que JMP 14 admite clases y OOP, y será mejor utilizar los métodos integrados. Parece que ya has descubierto esto. La POO debería ser una excelente metodología para crear widgets definidos por el usuario. Estoy interesado en ver tu producto final.
Re: ¿Se puede convertir un "widget" en una clase?@gzmorgan,
Cuando haya terminado de averiguarlo, si puede actualizar y etiquetarme en la actualización. Me sería de gran aprecio. Definitivamente me encantaría aumentar las clases con JSL y me encantaría poder aprender de su ejercicio de aprendizaje.
Re: ¿Se puede convertir un "widget" en una clase?Así que sigo pensando que las clases necesitan algo de trabajo. Subclasificar / heredar parece ser un poco torpe. No hay una referencia propia nativa en la clase, por lo que los métodos que usan cuadros de visualización no pueden hacer que sus funciones usen nada de los atributos de la clase. Pero hay soluciones a las cosas que @Justin_Chilton mostró aquí . Basado en eso hice autocompletador.
Pero también lo he hecho funcionalmente utilizando completer_box.jsl. Y de acuerdo a esta , los espacios de nombres especiales permitirán llamadas a espacios de nombres, así que también lo hice con el cuadro de contexto. Personalmente en este momento, me gusta el método de cuadro de contexto lo mejor para esto.
Re: ¿Se puede convertir un "widget" en una clase? @vince_faller , su script de Autocompletador usando clases JMP fue muy informativo. No tuve tiempo de trabajar en mi guión hasta hace una hora y me topé con una pared inmediatamente. Decidí referirme a sus enlaces sugeridos y vi su respuesta. La pieza clave de tu código para sacarme de mi esquina fue usar self y obj = Expr (self).
<<SET text="" changed=""></SET>
No estaba seguro de cómo referirme a la clase de propietario para el << Establecer texto cambiado (). ¡Muy agradable!
Y encontré esto Guía de scripting de JMP propaganda sobre el objeto JMP Class bastante confuso (página 293):
Notas:
• Todos los métodos, variables de miembro y funciones son públicos.
• Las funciones definidas dentro de una clase no pueden acceder a variables de método o métodos dentro de
clase.
Creo que me hubiera quedado estancado durante mucho tiempo sin tu ejemplo. Esto vale 5 Kudos!