你好!
我需要一些帮助,以便在该表的 On Close 语句中获取对该表的引用。
我有一个简单的脚本:一个带有“打开”按钮的 GUI,点击该按钮会打开一个数据表,还有一个包含表格列表的组合框。
我还使用关联数组来跟踪这些表,其中表名作为键,表引用作为值。
我需要在脚本中维护几个遗留的命名空间。为了从组合框中移除表格,我在 OnClose 语句中使用了 Eval(Eval Expr(Expr())) 技巧。但是,这个技巧无法从关联数组中移除表格。
还有一种技巧,就是使用 Function({this}, _dt = ((this << Child) << Get Data Table))。它在获取数据表引用时工作正常,但当我把它放在 Eval(Eval Expr(Expr())) 中时就失效了。
I tried to get the reference to the table separately, but looks like I don't know how Function({this}, ) works. How do I assign a result of this function to a variable?&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Anyways, here's the latest iteration of my script, please help me tweak it to make it work.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Eventually, I will need to handle data table manual name changes somehow and reflect it in the combo box.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/P&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;CODE class=" language-jsl"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Names Default To Here( 1 );
data = New Namespace(
"DataTables"
);
gui = New Namespace(
"GUI"
);
data:tablesListAA = [=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; ];
gui:guiWindow = Expr(
Border Box( Left( 10 ), Right( 10 ), Top( 10 ), Bottom( 10 ), Sides( 15 ),
V List Box(
gui:cb = Combo Box(
{},
selection = gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; GetSelected();
Print( "Selected: " || selection );
Current Data Table( data:tablesListAA[selection] );
Print( "Current Data Table: " || (Current Data Table() &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name) );
),
Button Box( "Add Table",
filePath = Pick File(
"Select JMP File",
"$SAMPLE_DATA",
{"JMP Files|jmp;jsl;jrn", "All Files|*"},
1,
0,
"newJmpFile.jmp"
);
dt = Open( filePath );
Eval(
Eval Expr(
dt &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; On Close(
getTable = Function( {this},
_table = ((this &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Child) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Data Table);
Return(_table);
);
_table = getTable(this);
Local( {data = Namespace( Expr( data &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name ) ), gui = Namespace( Expr( gui &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name ) ), _table = Expr(_table)},
Try(
_tableName = _table &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name;
Print("Trying to remove: "||_tableName);
Remove From( data:tablesListAA, _tableName );
gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Set Items( data:tablesListAA &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Keys );
)
)
)
)
);
dtName = dt &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Name();
Insert Into( data:tablesListAA, dtName, dt );
gui:cb &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Set Items( data:tablesListAA &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Get Keys );
)
)
)
);
nw = New Window( "Test table selection", gui:guiWindow );
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/CODE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-body&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-labs id="lingo-labs-918808" slang="en-US" mode="CREATE"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Automation and Scripting&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;
通常我只会评估 On Close 事件中的表名/引用。您也可以使用 < 这将引用数据表窗口(脚本索引中有示例)。
查看更多...
Names Default To Here(1);
data = New Namespace(
"DataTables"
);
gui = New Namespace(
"GUI"
);
data:tablesListAA = [=> ];
gui:guiWindow = Expr(
Border Box(Left(10), Right(10), Top(10), Bottom(10), Sides(15),
V List Box(
gui:cb = Combo Box(
{},
selection = gui:cb << GetSelected();
Print("Selected: " || selection);
Current Data Table(data:tablesListAA[selection]);
Print("Current Data Table: " || (Current Data Table() << Get Name));
),
Button Box("Add Table",
filePath = Pick File("Select JMP File", "$SAMPLE_DATA", {"JMP Files|jmp;jsl;jrn", "All Files|*"}, 1, 0, "newJmpFile.jmp");
dt = Open(filePath);
Eval(
Eval Expr(
dt << On Close(
tb = Expr(dt);
_tableName = tb << get name;
Print("Trying to remove: " || _tableName);
)
)
);
dtName = dt << Get Name();
Insert Into(data:tablesListAA, dtName, dt);
gui:cb << Set Items(data:tablesListAA << Get Keys);
)
)
)
);
nw = New Window("Test table selection", gui:guiWindow);
您也可以考虑使用 Subscribe To Data Table List() 来跟踪表格。我曾用它构建了一个与您在 JMP 脚本编辑器顶部看到的表格列表非常相似的功能,它可以处理名称更改/表格关闭/打开(它的构建更复杂,也存在一些问题)。
不知为何,我当时觉得在这个用例中,把表格嵌入到 Eval(Eval Expr(Excpr))) 函数里是不合适的。让我再重写一遍。