С моей точки зрения, все постоянные взаимодействия должны быть в классах, называемых Store / Repository. Если вы хотите изменить базу данных, это повлияет только на классы Store / Repository. Я думаю, что независимость фреймворка от приложения более ценна, чем производительность. Вы можете использовать объекты областей в случае проблем с производительностью, но я думаю, что ситуация в таких ситуациях очень редкая.
При нажатии клавиши (клавиш) запишите время. Затем сравните его со временем, когда вы отметили последний раз, когда была нажата клавиша (-и).
Если разница в пределах вашего порога, считайте это двойным. В противном случае не делайте этого. Грубый пример:
var delta = 500;
var lastKeypressTime = 0;
function KeyHandler(event)
{
if ( String.fromCharCode(event.charCode).toUpperCase()) == 'T' )
{
var thisKeypressTime = new Date();
if ( thisKeypressTime - lastKeypressTime <= delta )
{
doDoubleKeypress();
// optional - if we'd rather not detect a triple-press
// as a second double-press, reset the timestamp
thisKeypressTime = 0;
}
lastKeypressTime = thisKeypressTime;
}
}
Есть переменная (возможно, first_press
), для которой вы устанавливаете значение true, когда происходит событие нажатия клавиши, и запустите таймер, который сбросит значение переменной до false через установленный промежуток времени (как бы быстро вы ни хотели, чтобы они нажимали клавиши).
В событии нажатия клавиши, если эта переменная истинна, вы должны дважды нажать.
Пример:
var first_press = false;
function key_press() {
if(first_press) {
// they have already clicked once, we have a double
do_double_press();
first_press = false;
} else {
// this is their first key press
first_press = true;
// if they don't click again in half a second, reset
window.setTimeout(function() { first_press = false; }, 500);
}
}