過濾器更換處理程序我剛剛發現:創建過濾器更改處理程序僅當我將返回值存儲在變量中時才有效。
為什麼
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>