У меня есть модульная система, которая получает некоторые данные с моего сервера и возвращает их клиенту через ajax, после чего клиент обрабатывает эти данные.
Чтобы сохранить код модульным, я хочу ввести переменную обратного вызова, чтобы я мог назначить функцию обратного вызова, которая изменяется в зависимости от запрошенных данных. Желательно, чтобы это было вставлено в элемент, относящийся к функции (например, кнопка или вход)
Сейчас я сохраняю имя функции обратного вызова в dom как свойство data-callback="functionName"
elements, а затем eval()
с этим значением для запуска обратного вызова.
сниппет:
document.addEventListener( 'click', function( evt ){
var tgt = evt.target;
if( tgt.id == "btn" ){
var callback = tgt.dataset.callback;
var callbackParam = tgt.dataset.callbackParam;
eval( callback + "('" + callbackParam + "')" );
}
});
function foo( str ){
document.getElementById( "returnDisplay" ).innerText = str;
window.setTimeout( function(){
document.getElementById( "returnDisplay" ).innerText = '';
}, 1000 );
}
<div id=returnDisplay></div>
<button id=btn data-callback="foo" data-callback-param="bar">Click me</button>
Я знаю, что eval считается опасным, есть ли другой способ передать обратный вызов в javascript через DOM?