你好,
我正在創建一個JMP App,用於將數據收集到表中並以用戶友好的方式可視化該數據。 作為該應用程序的一部分,我有一個MainWin模塊,用戶可以在其中花費大部分時間。 在該MainWin模塊中,有一個UpdateGUI函數,該函數用於使用嵌入式數據表中的數據刷新UI(主要是匯總的錶框)。
當用戶想要添加數據時,他們啟動另一個模塊進行數據輸入。 輸入數據並按“確定”後,數據將添加到主表中。 我想關閉此模塊以在MainWin模塊中調用UpdateGUI函數。 我不記得是怎麼寫的,但是當第二個模塊是模式窗口時,它就可以工作了。 現在,我將第二個模塊更改為“對話”窗口,並且對UpdateGUI的調用不再起作用。
為了解決這個問題,我嘗試了一些方法。
第一個錯誤是第二個模塊不知道UpdateGUI函數(回想起來似乎很明顯),但是當我使該名稱全局可用時,從第二個模塊調用它意味著該函數內對MainWin模塊的所有引用都是也壞了..
我嘗試的第二件事是在MainWin中添加一個while循環,等待變量設置為1,然後調用刷新。 從技術上講,這是可行的,但是卻導致了一些顯著的下降……也許是因為我使用了Wait()函數。
您如何建議處理這種跨模塊函數調用?
謝謝!</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-313041" slang="en-US">回复:JMP應用程序模塊和命名空間</LINGO-SUB><LINGO-BODY id="lingo-body-313041" slang="en-US"><P>你好<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/20438" target="_blank">@mringqui</A> ,</P>
<P>我想對於您要嘗試的工作我有解決方案。基本上,我認為您希望將對MainWin實例名稱空間的引用的範圍擴展到應用程序名稱空間。為此,我在MainWin腳本中添加了以下行:</P>
<PRE><CODE class=" language-jsl">Application:MainInstance = this module instance;
我構建了一個簡單的應用程序來說明。MainWin僅顯示一個數字。UpdateWin允許您輸入一個新數字,當您單擊“關閉”時,該數字將更新MainWin中的顯示。您可以看到我如何在Application名稱空間腳本中定義內容,以使Update GUI表達式可在所有模塊中使用。
display_num = 0;
Update GUI = Expr(
Show(MainInstance:Text_Disp << Get Text);
MainInstance:Text_Disp << Set Text(char(display_num));
);
該方法應概括為您要執行的操作。
@cwillden感謝您對此進行調查!
在應用程序名稱空間中添加引用使該函數可以以一種比以前更乾淨的方式供UpdateWin使用,謝謝! 我肯定會在將來的情況下利用這一點。
不幸的是,從UpdateWin調用該函數仍然會將函數中的所有變量重新限定為UpdateWin。 我認為我了解到的是我需要清理名稱空間。 可能需要一個名稱默認為Here(1);扔在那裡。
通過發送一個<<點擊;到MainWin中的Refresh按鈕。 這似乎可以確保所有範圍都正確。
再次感謝您的幫助,您已將我設定在正確的方向