每次值更改时运行方法

时间:2009-07-23 13:12:45

标签: javascript events observer-pattern thunderbird

我想知道你们中的任何人是否可以帮助我解决我认为存在问题的问题。

我有一个元素(svg更具体),我想在每次更改某个值时更新。

我有变量: GetThreadTree().treeBoxObject.getFirstVisibleRow()最初为0.我希望每次function updateCanvas()值都会GetThreadTree().treeBoxObject.getFirstVisibleRow()运行。

我拥有的是:

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

但它只调用updateCanvas()一次,当它第一次被调用时,由于某种原因不执行它之后的代码。我检查了错误控制台,没有任何东西。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你的逻辑是错误的。当你更新你的值时,需要通过函数在一个地方完成它,比如treeBoxObject.IncrementRow()或者类似的东西。

然后你可以让该函数触发一个事件,比如onTreeBoxRowIncremented。那个事件是你倾听的,当这个事件发生变化时,你可以做任何你喜欢的检查和更新。

原谅奇怪的函数名称只是试图使用你拥有的东西。

答案 1 :(得分: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();

但它不是最优雅的解决方案,但它有效;)