Я организовал JS-часть в модули, используя библиотеку под названием RequireJS. Он отлично работает, но в последнее время я нашел очень непоследовательную ошибку в Firefox (которая является единственным браузером, который нам нужно поддерживать), хотя до сих пор все работает нормально и в Chrome). Прежде всего у меня есть большой файл с именем util.js
, который я загружаю в других частях настроить основные функции, которые я использую, чтобы абстрагировать DOM, наиболее важная часть его, чтобы понять суть проблемы заключается в следующем:Неисправность функции с чистым JS, throught requireJS, при связывании слушателей с ярлыками
"use strict";
define(function() {
...
Util.killCtrl = function(action) {
return function(event) {
if(event.ctrlKey) {
action && action(event);
if(!Util.intersection([72, 76, 82], [event.keyCode]).length)
event.preventDefault();
}
};
Util.intersection = function(a, b) {
return a.filter(function(e) {
return b.indexOf(e) != -1;
});
}
...
return Util;
});
Я просто используйте эту функцию, чтобы упростить привязку пользовательских ярлыков, например CTRL+P
. При использовании в следующем коде, он отлично работает (это контроллер, который файл называется sale.js
):
"use strict";
define(['util', 'basic', 'language', 'restrict/models/orderItem', 'modal', 'tableSelector'],
function(Util, Basic, lang, OrderItem, Modal, TableSelector) {
...
addEventListener('keyup', Util.killCtrl(function(event) {
switch(event.keyCode) {
case 66: //B -> search prod
searchProd.click();
break;
case 80: //P -> print order
print.click();
break;
case 69: //E -> remove prod
removeProd.click();
break;
case 46: //DEL -> quick remove prod
var selectedPos = tableSelector.getSelectedRow()[0];
deletePos(selectedPos);
break;
case 86: //V -> back
back.click();
break;
case 67: //C -> focus code
OrderItem.orderItems = Util.woIndex(OrderItem.orderItems);
OrderItem.orderItems = Util.woIndex(OrderItem.orderItems);
form.code.focus();
break;
case 68: //D -> detail item
var pos = tableSelector.getSelectedRow()[0];
var orderItem = OrderItem.orderItems.filter(function(oi) { return oi.displayOrder == pos })[0];
detailForm.displayOrder.value = orderItem.displayOrder;
detailForm.name.value = orderItem.name;
detailForm.amount.value = orderItem.amount;
Basic.syncNF(detailForm.amount);
detailButton.click();
break;
case 81: //Q -> focus amount
amountFacade.focus();
}
}));
...
});
То же самое не работает должным образом в следующем контроллере, billing.js
:
define(['util', 'basic', 'language', 'restrict/models/payer', 'restrict/models/paymentType',
'restrict/models/payment'], function(Util, Basic, lang, Payer, PaymentType, Payment) {
...
addEventListener('keyup', Util.killCtrl(function(event) {
switch(event.keyCode) {
case 80: // P
printButton.click();
break;
}
}));
...
});
В это время он открывает экран печати по умолчанию из браузера, вместо запуска команды, которую я дал !! Другие функции контроллера довольно хороши, и нет проблем в billing.js
, но это. Все контроллеры загружаются с файлом под названием main.js
, здесь идет:
"use strict";
require(['util', 'basic'], function(Util, Basic) {
if(Basic.verifyPlaces('sale/fastSelling')) {
var requirements = ['restrict/sale', 'dynamicSearch'];
require(requirements);
}
else if(Basic.verifyPlaces('billing/receipt')) { require(['restrict/billing']); }
else if(Basic.verifyPlaces('sale/tables')) { require(['restrict/access']); }
});
Все файлы загружаются, потому что все функциональные возможности и работает, кроме этого, Вы когда-нибудь сталкивались с подобной проблемой?
Я сделал некоторые журналы, в preventDefault
части от util.js
, а иногда (например, при использовании CTRL+I
) он открывает Информация о странице вместе с бревном, а иногда (например, при использовании CTRL+P
) он открывает PRINT и Безразлично Не записывай ничего.
Спасибо заранее