顯示所有打開表的列錶框我正在嘗試構建一個列錶框,列出所有打開的數據表,並使用新打開/新關閉的表自動更新。 我從下面的腳本開始,但由於某種原因,onClose 函數不起作用。
感謝幫助:)
names default to here(1);
f1 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
f2 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , onclose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
T_list = get data table list ();
lb = listbox(T_list);
)
);
腳本回复:顯示所有打開表的列錶框在測試訂閱數據表列表後,如果可能的話,我會避免它。 它似乎根本無法正常工作,事件未觸發,有關應如何使用它的文檔相當糟糕等等。 我在 Windows 10 上使用 JMP16.1.0 Pro。
我有一個應用程序,我想要這樣的東西,但我想我只會添加刷新數據表列表或類似的東西。
回复:顯示所有打開表的列錶框謝謝@jthi ! 這樣可行!
如果您不介意,您是否也可以展示如何設置“OnRename”子句?
回复:顯示所有打開表的列錶框您應該能夠向 lb 添加新值,它們只刪除帶有索引的封閉值(使用 Contains() 獲取索引),還向函數添加了局部變量。
Names Default To Here(1);
f1 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << append (tableList)
);
f2 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << Remove Item(Contains(lb << get items, tableList));
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , OnClose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
lb = listbox(get data table list ());
)
);回复:顯示所有打開表的列錶框謝謝@txnelson !! 這正是我遇到的錯誤。 我想與此同時,我必須為此找到一個解決方法。
回复:顯示所有打開表的列錶框使用下面的 JSL,這是我發現的。
Names Default To Here( 1 );
f2 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("Close");
);
f1 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("add");
);
asub = Subscribe to Data Table List( , onopen( f1 ) );
Subscribe to Data Table List(asub , onclose( f2 ) );
nw = New Window( "Trial",
Show Menu( 0 ),
V List Box(
T_list = Get Data Table List();
lb = List Box( T_list );
)
);
- 創建的列錶框會添加新的數據表,不會報錯。
- f1函數每次加法執行一次
- 如果關閉數據表,它不會從列錶框中刪除。
- 如果關閉第二個數據表,則先前關閉的數據表將從列錶框中刪除。
- 如果關閉列錶框並第二次運行 JSL,並關閉數據表,則 f2 函數將運行兩次。將運行第一次運行 JSL 的 f2 函數,然後運行 f2 函數的第二個實例。這可以通過更改 Show() 語句來顯示。如果 Show 語句從
Show( "Close" );
到Show( "Close 2" );
關閉數據表時,將顯示 Show() 語句的兩個版本,
- JSL 的後續執行添加了 f2 函數的額外副本,每個副本針對每個數據表關閉執行。
- Clear Globals 和 Clear Symbols 不會消除以前版本的 f2 函數。
這顯然是 JMP 錯誤,需要發送給 JMP 支持人員。
我已將錯誤提交給他們。
回覆:顯示所有開啟表格的列錶框我用一些新發現來探討這個主題,也許它會對某些人有幫助。我嘗試做與@Djtjhin類似的事情,並遇到了這裡描述的所有相同的問題,這些問題大多由於這裡的討論而得到解決。
我可以補充的是@txnelson描述的奇怪行為的解釋。問題是,如果您訂閱但沒有明確說明訂閱名稱,如下所示:
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )每次執行腳本時都會建立一個採用新通用名稱(“_DTListSubscriber123”)的新訂閱,並在最後增加計數器。
訣竅是明確命名訂閱者,以便每次運行腳本時覆蓋同一個訂閱者,例如:
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )或在最後取消訂閱,例如在< <>
Unsubscribe to data table list( asub, "ALL" )
在其他新聞中, @Djtjhin ,重命名它的工作原理非常簡單,似乎事件是在重命名之後觸發的,因此 Get Data Table List() 會獲取新名稱。但是在使它工作之前,我因為另一個原因而絞盡腦汁,因為缺乏文件。與 OnOpen 和 OnClose 相比,OnRename 函數需要 2 個參數(新名稱/表和舊名稱/表),否則您將收到錯誤。儘管在這個特定的列錶框範例中您實際上並不需要它們,但如果需要,您還必須記住它們是不同的變數類型,一個是表格,另一個是字串(見下文)。
Names Default To Here(1);
f = Function ( { new_name_as_table, old_name_as_string },
print(asub||" renaming: "|| old_name_as_string || " to " || (new_name_as_table << get name) );
lb << set items( Get Data table List() );
);
asub = Subscribe to data table list( "MySub", OnRename( f ) );
nw = new window("Trial",show menu(0),
<< On Close(Unsubscribe to data table list( asub, "ALL")),
vlistbox(
lb = listbox(get data table list ());
)
);
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
dt << set name( (dt<<GET name=""></GET>Otherwise I agree with general sentiment that the subscriber it's very hard to work with, you have to be really careful to tie up all the loose ends. Better documentation would be much appreciated.