2009-07-23 7 views
0

Ich frage mich, ob jemand von euch kann mir helfen, was ich denke, beobachtet Problem.Führen Sie eine Methode jedes Mal, wenn Wert ändert

Ich habe ein Element (Svg, um genauer zu sein), die ich jedes Mal aktualisieren möchte, wenn ein Wert irgendwo geändert wird.

Ich habe Variable: GetThreadTree().treeBoxObject.getFirstVisibleRow(), die anfänglich 0 ist. Ich möchte eine function updateCanvas() jedes Mal Wert von GetThreadTree().treeBoxObject.getFirstVisibleRow() Änderungen ausführen.

Was ich habe, ist:

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

Aber es ruft updateCanvas() nur einmal, als sie zum ersten Mal aufgerufen wird, und aus irgendeinem Grund nicht ausgeführt den Code ein, nachdem es ist. Ich habe Fehlerkonsole überprüft und nichts ist da.

Irgendwelche Ideen?

+0

diese Hilfe Does : http://stackoverflow.com/questions/240592/is-it-possible-to-listen-for-changes-to-an-objects-attributes-in-javascript –

+0

Auch, was ist die Plattform? Browser? Javascript-Version? –

+0

Es hilft nicht, der Effekt ist immer noch so wie in meinem Problem. Es ist für Thunderbird 3.0b4pre, also denke ich, dass JavaScript-Version eine der neuesten ist. – Artur

Antwort

0

Eine Möglichkeit, dieses Problem zu lösen ist:

var registeredRow = 0; 

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

Und vor checkRow genannt wird:

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

Aber es ist nicht die eleganteste Lösung, aber es funktioniert;)

2

Sie Logik ist alles am falschen Ort. Wenn Sie Ihren Wert aktualisieren, was auch immer es ist, das an einer Stelle von einer Funktion erledigt werden muss, so etwas wie treeBoxObject.IncrementRow() oder ähnliches.

Dann können Sie diese Funktion auslösen ein Ereignis, wie onTreeBoxRowIncremented. Auf dieses Ereignis achten Sie, wenn sich das ändert, können Sie Ihre Prüfung durchführen und aktualisieren, was immer Sie möchten.

Entschuldigen Sie die seltsamen Funktionsnamen, die nur versuchen zu verwenden, was Sie haben.