2009-07-23 3 views
0

여러분 중 누군가 제가 문제를 관찰하고 있다고 생각하는 것으로 도울 수 있는지 궁금합니다.언제든지 값 변경 방법을 실행하십시오.

필자는 어딘가의 값이 변경 될 때마다 업데이트하고 싶은 요소 (svg가 더 구체적 임)가 있습니다. 처음에 나는 GetThreadTree().treeBoxObject.getFirstVisibleRow() 변화의 function updateCanvas() 때마다 값을 실행하려면 0입니다 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 –

+0

또한 플랫폼은 무엇입니까? 브라우저? Javascript 버전? –

+0

도움이되지 않습니다. 효과는 여전히 내 문제와 같습니다. Thunderbird 3.0b4pre 용이므로 JavaScript 버전이 최신 버전 중 하나라고 생각합니다. – Artur

답변

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와 같은 이벤트를 발생시킬 수 있습니다. 그 사건은 당신이 듣는 것입니다. 변화가 생기면 원하는대로 무엇이든 확인하고 업데이트 할 수 있습니다.

당신이 가지고있는 것을 사용하려고하는 기묘한 함수 이름을 사용하지 마십시오.