我可以信任settimeout(fn,0),还是应该使用替代方案?

问题描述 投票:0回答:1
尽管有很多问题和答案告诉我为什么和什么是为了什么,但我找不到一个很好的选择。 我的问题

我有一个点击处理程序,该操作器执行一个函数,该函数发出另一个类以更新其状态的功能。

点击处理程序在父元素上。 我在该元素内有一个复选框,该元素将被检查或未选中。

由于单击处理程序在父元素上,该元素首先被调用。但是我需要我的复选框才能在发送信号之前更改状态。 因此,我使用setTimeout(0)

防止在检查复选框之前发送信号。

html

setTimeout(0)

javascript

<div click.delegate="update()">
    <div class="checkbox">
        <label>
            <input checked.bind="group.validated" type="checkbox"> Visibility
        </label>
    </div>
</div>

基本上,正在发生的事情是,update(){ setTimeout(()=>{ this.signaler.signal('refresh-groups'); }, 0); return true; } 是在

return true;
函数之前执行的。这样,检查了复选框
Before

信号即将发送。 注意这不会在首先更新复选框状态的常规方法中发生,但这是this.signaler.signal

框架行为的方式。
我不喜欢我在这里创造的感觉。 0秒的超时意味着该函数在呼叫列表的末尾,仅此而已。如果我的
onclick

声明会发生任何事情,导致它等待0.1秒,我遇到了同样的问题。

有其他更值得信赖的选择吗?简单地使用
Aurelia
似乎在这里没有解决问题。
    
我认为主要问题是您正在使用return true;
事件,该事件会触发输入元素的值更改。改用
Promise
事件。

Https://gist.run/?id =863282464762B54C8CF67DE541BAC4D3


您可以运行

click

作为任务。例如:

change

javascript ecmascript-6 aurelia
1个回答
1
投票
Https://gist.run/?id =88500143701DAB0B0B0697B17A211AF3A7

    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.