スクリプト化された「ウィジェット」をクラスに変換できますか?この議論と囲まれたスクリプトは、次のものによって引き起こされました。
私はヴィンスの願いに賛成しました TextEditBox それは内蔵の私の "願い"に似ていたので、autocompleter リストボックスフィルタ。特定のUI(ダイアログ/ウィンドウ)をプログラムして、両方の項目で同様の機能を実現しました。しかし、私はこれらの「ウィジェット」を自動的に構築する関数を作成してみることにしました。クラス関数の代わりになるように定義できます。
添付されている3つのスクリプトがあります。
- TEB_LB_Widget.jsl - このスクリプトは、これらのウィジェットを構築するためのサポート機能と2つの主要機能を定義します。 MakeLBFilter() そして MakeTEBSelector() 。
- TestMakeLBFilter.js l - このスクリプトには上記のスクリプトが含まれ(パスをそのスクリプトの場所に変更する必要があります)、次に2つの異なるリストボックスを持つ単純なウィンドウを作成してから、それぞれに対してリストボックスフィルタを作成します。デモンストレーションのためだけに、スクリプトにwaitステートメントがあります。 スクリプトの最後にいくつかのテストケースがあります。(以下に示すコードスニペットと表示)
- TestTEBSelector.jsl - これはスクリプト2と似ています。含まれていないパスを確認してください。 このウィジェットはあまり開発されていません。
両方のウィジェットに追加機能を追加することもできますが、各ウィジェットとその機能をユーザー定義クラスのインスタンスとして作成できるかどうかという問題を追求することにしました。
私は議論を読みましたオブジェクト指向JSLの例 2016/08/18 構文はまだ私のところで「クリック」されていません、そして私は方向を探しています:
- JMPクラスを使用してオブジェクトウィジェットを定義できますか?この場合、クラスは既存のオブジェクト(そしておそらくそのコンテナ)と新しいオブジェクトを追加するための関数、そしてそれぞれの場合リストを必要とします。
- そうだとすれば、クラスがよりよい方法であり、誰かが単純な例か、2016年のリンクに含まれているもの以外のドキュメンテーションへのリンクを持っているなら、私はそれを感謝するでしょう。それから私は変換を追求します。 私は2016年の議論から、名前を追加しています。 @drewfoglia 、 @Phil_Brown 、 @msharp
@vince_faller 、私はあなたの欲しい物のリストに同意します、組み込みが最善でしょう。しかし、新しい例をプロトタイプ化する方法を知っていればいいでしょう。
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>
テキストなし - 全リストを表示
左は「含む」を使用し、右は「で始まる」を使用
スクリプト化された「ウィジェット」はクラスに変換できますか?更新:ついに構文は意味を成し、クラスオブジェクトのインスタンスを作成しました。それで私は私の質問に答えました。答えはイエスです。
関数とメソッドがスクリプト化されたら、この記事を更新してLBFilterとTEBSelectorというクラスを定義して使用します。JMP14クラスの構文が使いやすいと思います。
スクリプト化された「ウィジェット」はクラスに変換できますか?これを掘り下げる時間はありませんが、2016年のその会話の時から、JMP 14はクラスとともにOOPをJSLにもたらしました。 私は以前はJSLにOOPを実装しないことをお勧めしていましたが、古い記事で提案されている方法は非常に厄介でした。 私の意見では、それらは、プロダクションレベルのコードを作成する際の練習よりも、それが実行できるかどうかを判断する際の練習の方がよかったです。 JMP 14ではクラスとOOPがサポートされているので、その意見を正式に述べておきます。組み込みメソッドを使用する方が適しています。 あなたはすでにこれを考え出しているようです。 OOPは、ユーザー定義ウィジェットを作成するための優れた方法論であるはずです。 あなたの最終製品を見たいのですが。
スクリプト化された「ウィジェット」はクラスに変換できますか?@ gzmorgan、
あなたがそれを考え出すことを終えたとき、あなたが更新することができて、更新の私にタグを付けることができるなら。とても感謝しています。私は間違いなくJSLでクラスを勉強したいと思います、そして私はあなたの学習運動から学ぶことができることを望みます。
スクリプト化された「ウィジェット」はクラスに変換できますか?だから私はまだクラスはいくつかの作業が必要だと思います。サブクラス化/継承は少し不思議です。クラス内にネイティブの自己参照がないため、表示ボックスを使用するメソッドは、その関数にクラス属性を使用させることはできません。しかし、そのことには回避策があります。 @Justin_Chilton 示したここに 。それに基づいて、私はAutocompleterを作りました。
しかし、私はcompleter_box.jslを使って機能的にも作りました。 そしてに従ってこの特別な名前空間は名前空間呼び出しを許可するので、私は同様にコンテキストボックスでそれを作りました。 個人的には、コンテキストボックス方式がこれに最適です。
スクリプト化された「ウィジェット」はクラスに変換できますか? @vince_faller JMPクラスを使ったAutoCompleterスクリプトは非常に有益でした。 私は約1時間前まで私の脚本に取り組む時間がなかったので、すぐに壁にぶつかりました。 私はあなたの提案されたリンクを参照してあなたの反応を見たことにしました。 私の隅から抜け出すためのあなたのコードの重要な部分はselfとobj = Expr(self)を使用することでした。
<<SET text="" changed=""></SET>
<< Set Text Changed()の所有者クラスを参照する方法がわかりませんでした。 非常に素晴らしい!
そして私はこれを見つけました JMPスクリプティングガイド JMPクラスオブジェクトに関してはかなり混乱しています(293ページ)。
ノート:
•すべてのメソッド、メンバ変数、および関数はパブリックです。
•クラス内で定義された関数は、その中のメソッド変数またはメソッドにアクセスできません。
クラス。
私はあなたの例がなければ長い間立ち往生していたと思います。これは5つの賞賛に値します。