过滤器更换处理程序我刚刚发现:创建过滤器更改处理程序仅当我将返回值存储在变量中时才有效。
为什么
filter << Make Filter Change Handler( f );
不行? 背后是不是有一些值得了解的知识呢?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
dist = Distribution( Automatic Recalc( 1 ), Continuous Distribution( Column( :POP ) ) );
filter = dist << Local Data Filter( Add Filter( columns( :Region ) ) );
f = Function( {a}, Print( a ) );
// 1st version dosn't work - why?
// filter << Make Filter Change Handler( f );
rs = filter << Make Filter Change Handler( f );自动化和脚本编写回复:过滤器更换处理程序你好@hogi - 这是最近别人想出来的。当前行为背后的原因是 JSL 符号是调度回调的对象的所有者。 与创建窗口的平台不同,没有其他明确的候选人可以取得所有权。如果您创建一个框但不给它父级或将其存储到符号中,那么这种情况也会发生在显示框之类的情况下,只是在这种情况下不太明显。一种选择是将变量放入窗口范围符号中,以便它随报告一起消失。
回复:过滤器更换处理程序你好@danschikore , 感谢您的答复。
我注意到从图形生成器对象打开的数据过滤器总是触发该函数两次 - 而数据过滤器上下文框中的数据过滤器仅触发该函数 1 次。
如果您禁用
count excluded rows
然后您可以观看两个数据过滤器之间的一些乒乓球运动。
函数调用返回值0的原因是什么?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
countexcluded = 1;
New Window( "Big Class - Dashboard",
Data Filter Context Box(
Panel Box( "Data Filter Context Box: Data Filter + GraphBuilder",
H Splitter Box(
Size( 700, 400 ),
<<SIZES></SIZES>