gpt4 book ai didi

windows-8 - WinJS - 防止两次快速按钮按下

转载 作者:行者123 更新时间:2023-12-01 16:15:40 25 4
gpt4 key购买 nike

我们在 WinJS 的应用程序中遇到这样一种情况,我们的序列化数据是从磁盘上的文件中读取的,并且根据页面的不同,会访问文件的不同部分。

我们遇到的问题是,当用户双击控件、按钮、 ListView 等时,系统会尝试读取文件两次,偶尔会崩溃。

在 WinJS 中是否有推荐的路线来防止或处理控件上的双击?除了在按下时手动禁用和重新启用所有按钮之外?

我们已经查看了一些选项,包括重写 addEventListener,但没有一个是完美的,我们将不胜感激这方面的任何建议。

附加:虽然在这个例子中问题是读取文件,但我们有其他应用程序,在列表上执行快速双击将尝试导航到页面两次(并将其添加到 nav.history 两次),所以看起来就像有很多地方和症状可能会发生这种事情。

最佳答案

最好的方法是在处理时禁用按钮,并在完成后重新启用它们。如果事情花费的时间比预期的要长,这将向用户提供适当的反馈。

您可以通过数据绑定(bind)禁用它们,而不是手动设置它们。

HTML

<button id="button1" data-win-bind="disabled: disabled">Click</button>
<button id="button2" data-win-bind="disabled: disabled">Click</button>
<button id="button3" data-win-bind="disabled: disabled">Click</button>
<button id="button4" data-win-bind="disabled: disabled">Click</button>

JavaScript

var bindingSource;

app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
// TODO: This application has been newly launched. Initialize
// your application here.
} else {
// TODO: This application has been reactivated from suspension.
// Restore application state here.
}
args.setPromise(WinJS.UI.processAll());

var disabledContext = { disabled: false }

var btn = document.getElementById("button1");
btn.addEventListener("click", buttonClickHandler, false);
WinJS.Binding.processAll(btn, disabledContext);

btn = document.getElementById("button2");
btn.addEventListener("click", buttonClickHandler, false);
WinJS.Binding.processAll(btn, disabledContext);

btn = document.getElementById("button3");
btn.addEventListener("click", buttonClickHandler, false);
WinJS.Binding.processAll(btn, disabledContext);

btn = document.getElementById("button4");
btn.addEventListener("click", buttonClickHandler, false);
WinJS.Binding.processAll(btn, disabledContext);

bindingSource = WinJS.Binding.as(disabledContext);
}
};

function buttonClickHandler(eventInfo) {
bindingSource.disabled = true

WinJS.Promise.timeout(5000).then(function (c) {
bindingSource.disabled = false
});
}

--罗布

关于windows-8 - WinJS - 防止两次快速按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com