最好的方法是在处理时禁用按钮,并在完成后重新启用它们。如果事情花费比预期更长的时间,这将向用户提供适当的反馈。
您可以通过数据绑定禁用它们,而不是手动设置它们。
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
});
}
--Rob
你可以有它每次按下诸如 “ProcessingValue” 所有按钮继续之前检查设置一个变量? – 2014-10-07 23:26:47
嗨Nate,这是我们正在寻找的建议之一,缺点是,这可能会在应用程序的很多领域触发,我们需要多次编写相同的代码,或者看看某种方式的重写addEventListener并使所有底层侦听器函数返回承诺,以便我们可以在处理完成后设置“处理值”。 – dougajmcdonald 2014-10-08 09:06:10