每次值变化时运行一个方法

发布于 2024-07-29 02:44:48 字数 534 浏览 5 评论 0原文

我想知道你们中是否有人可以帮助我解决我认为的观察问题。

我有一个元素(更具体地说是 svg),每次某处的值发生更改时我都想更新它。

我有变量: GetThreadTree().treeBoxObject.getFirstVisibleRow() 最初为 0。我想在每次 GetThreadTree().treeBoxObject 的值时运行一个 函数 updateCanvas() 。 getFirstVisibleRow() 发生变化。

我所拥有的是:

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

但它仅在第一次调用时调用 updateCanvas() 一次,并且由于某种原因不执行其后面的代码。 我检查了错误控制台,什么也没有。

有任何想法吗?

I wonder if any of you guys can help me with what I think is observing problem.

I have an element (svg to be more specific) that I want to update every time a value somewhere is changed.

I have variable:
GetThreadTree().treeBoxObject.getFirstVisibleRow() that initially is 0. I want to run a function updateCanvas() every time value of GetThreadTree().treeBoxObject.getFirstVisibleRow() changes.

What I have is:

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

But it calls updateCanvas() only once, when it's called for the first time, and for some reason does not execute the code that is after it. I checked error console and nothing is there.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

下雨或天晴 2024-08-05 02:44:48

你的逻辑完全错了地方。 当您更新值时,无论什么都需要通过函数在一个地方完成,例如 treeBoxObject.IncrementRow() 或类似的函数。

然后您可以让该函数触发一个事件,例如 onTreeBoxRowIncremented。 该事件是您监听的事件,当该事件发生变化时,您可以进行检查并更新您喜欢的任何内容。

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

You logic is all in the wrong place. When you update your value what ever it is that needs to be done in one place by a function, something like treeBoxObject.IncrementRow() or similar.

Then you can have that function fire an event, like onTreeBoxRowIncremented. That event is what you listen out for, when that changes then you can do your check and update whatever you like.

Excuse the weird function names just trying to use what you have.

好倦 2024-08-05 02:44:48

解决这个问题的一种方法是:

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();

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

One way of solving this problem is:

var registeredRow = 0;

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

And before checkRow is called:

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

But it's not the most elegant solution but it works ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文