2009-07-23 80 views
0

我不知道是否有任何你們能幫助我什麼,我認爲是觀察問題。運行的方法,每次值變化

我有我想要更新每一個地方的值發生改變時的元素(SVG更具體)。

我有變量: GetThreadTree().treeBoxObject.getFirstVisibleRow()最初是0.我想運行function updateCanvas()每次GetThreadTree().treeBoxObject.getFirstVisibleRow()的值更改。

我所擁有的是:

canvas.observe(GetThreadTree().treeBoxObject.getFirstVisibleRow(), "scroll", updateCanvas()); 

但它調用updateCanvas()只有一次,當它被稱爲是第一次,出於某種原因,不執行就是後的代碼。我檢查了錯誤控制檯,但沒有任何內容。

任何想法?

+0

這是否幫助:http://stackoverflow.com/questions/240592/is-it-possible-to-listen-for-changes-to-an-objects-attributes-in-javascript – 2009-07-23 13:16:53

回答

0

解決這個問題的方法之一是:

var registeredRow = 0; 

function checkRow(){ 
    var row = GetThreadTree().treeBoxObject.getFirstVisibleRow(); 
    if (registeredRow != row) { 
     registeredRow = row; 
     updateCanvas(); 
    } 
    window.setTimeout(checkRow, 1); 
} 

而且checkRow之前被稱爲:

registeredRow = GetThreadTree().treeBoxObject.getFirstVisibleRow(); 
checkRow(); 

但它不是最完美的解決方案,但它的工作原理;)

2

您的邏輯是所有在錯誤的地方。當你更新你的值時,需要在一個地方由一個函數來完成,比如treeBoxObject.IncrementRow()或類似的東西。

然後你就可以有一個功能火災的事件,像onTreeBoxRowIncremented。那個事件就是你聽到的,當這個變化發生時,你可以做你喜歡的任何檢查和更新。

藉口怪異的函數名只是想用自己擁有什麼。