回复:展示盒:水平?使用 Get Display Path() 怎么样? Get Display Path() 获取一个相对表达式在父框和对象之间导航。 如果你想计算父级的数量以达到顶级父级,请尝试遵循 jsl。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :weight ), X( :height ), Fit Line );
rpt = Report( biv );
rootParent = rpt << Top Parent();
path_to_parent = rpt[number col Box( 9 )] << Get Display Path( rootParent, Mode( "Subscript" ) );
count = N Items( Words( Char( Eval Expr( path_to_parent ) ), "," ) );
回复:展示盒:水平?我有同样的想法:)
不过好像有时候获取显示路径不会一步一步来:
New window("test",Panel Box("1",Panel box("2",PanelBox("3",HList Box(Spacer Box(100),Text Box("4"),V List Box(Text Box("5"),Spacer Box(Size(100,100)),tb=Text Box("6")))))));
rootParent = tb << Top Parent();
path_to_parent = tb << Get Display Path( rootParent, Mode( "Subscript" ) );
count = N Items( Words( Char( Eval Expr( path_to_parent ) ), "," ) );
回复:展示盒:水平?根据脚本索引,<< Get Display Path 的目的不是为您提供完整路径,而是“健壮”的表达方式(健壮的路径)。
XPath 或递归函数可能相当容易实现(不知道这是否总是有效,JMP 中的某些平台可能非常复杂并且可能无法捕获某些元素)
Names Default To Here(1);
nw = New Window("test", // 6
Panel Box("1", // 5
Panel Box("2", // 4
Panel Box("3", // 3
H List Box( // 2
Spacer Box(100),
Text Box("4"),
V List Box( // 1
Text Box("5"),
Spacer Box(Size(100, 100)),
tb = Text Box("6") // 0
)
)
)
)
)
);
get_parents = function({elem, idx = 0},
next_elem = elem << parent;
If(Is Empty(next_elem),
return(idx);
);
idx++;
show(next_elem << class name);
get_parents(next_elem, idx);
);
show(get_parents(tb)); // has also the headbox
parent_count = N Items(nw << XPath("//TextBox[text() = '6']/ancestor::*"));
回复:展示盒:水平?感谢你的回复。
下面的脚本怎么样? 该脚本重复父函数,直到到达顶层父函数。
nw = New Window( "test",
pb1 = Panel Box( "1",
pb2 = Panel Box( "2",
pb3 = Panel Box( "3",
H List Box(
Spacer Box( 100 ),
tb4 = Text Box( "4" ),
V List Box(
tb5 = Text Box( "5" ),
Spacer Box( Size( 100, 100 ) ),
tb6 = Text Box( "6" )
)
)
)
)
)
);
//count parent display box from target to top display box
count parent = Function( {nw, target, top}, //window, target display box, top display box
top_parent = top;
end = 0;
current = target;
displaybox_list = {};
For( i = 1, And( end == 0, i < 100 ), i++,
parent = current << parent();
If( Is Empty( parent ),
end = 1,
current = parent;
Insert Into( displaybox_list, current );
If( top_parent == current,
end = 1
);
);
);
Eval List( {i - 1, displaybox_list} );
);
{count, displaybox_list} = count parent( nw, tb6, pb1 );
show(count);回复:展示盒:水平?谢谢。
我只是用稍微不同的树尝试了一下,结果堆栈溢出。
这里父函数不爬树?!
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "test",
H List Box( Panel Box(
"", H List Box( Text Box( "Hallo" ), tb = Filter Col Selector() ) ) ) );
get_parents = Function( {elem, idx = 0},
next_elem = elem << parent;
If( Is Empty( next_elem ),
Return( idx )
);
idx++;
Print( idx );
Show( next_elem << class name );
get_parents( next_elem, idx );
);
Show( get_parents( tb ) );回复:展示盒:水平?如果我不得不猜测它到达过滤器列选择器并出于某种原因从头开始(在我看来,过滤器列选择器是 JMP 中最容易出错和最烦人的显示框之一)。 XPath 可能仍然有效,但构建查询可能更烦人。
回复:展示盒:水平?好的,
让我们来看看 ...
案例 TS-00034009
回复:展示盒:水平?感谢您报告问题! 我可以确认开发人员已经收到它,并且已经为 JMP 的下一个主要版本对这些显示框消息的行为进行了一些改进。显示盒:水平?是获取显示框的级别/深度(?)的命令,即到达顶部父级的父级数吗?
高级统计建模回复:展示盒:水平?感谢您修复它。