Я использую метод, чтобы принять часть идентификатора элемента и использовать его, чтобы определить, какой URL-путь мне нужно передать методу. В моем случае это используется событием нажатия на кнопку, которая может быть присоединена к любой из нескольких сеток, поэтому мне нужно знать, на какой сетке я работаю, чтобы узнать, какие данные необходимо перезагрузить:
jQuery('.reset').click(function(e) {
e.preventDefault();
jQuery('#' + grid_id + '_mnf').toggle();
jQuery('#' + grid_id + '_mnfall > .instance').each(function () {
jQuery(this).removeAttr("checked");
});
var url = eval(grid_id + '_url');
jQuery('#foo').setGridParam({url:url}).trigger('reloadGrid');
});
Возможные URL определены как переменные, поэтому у меня есть что-то вроде:
var foo_url = url_path + '?input=moduleone¶m=1';
var bar_url = url_path + '?input=moduleone¶m=2';
Это означает, что в методе setGridParam выше значение url будет одним из этих переменных. Если я просто сделаю:
var url = grid_id + '_url'; //note I'm not using eval here
Значение, переданное setGridParam, не будет работать.
Если я не использую eval
, как я делаю выше, URL не будет работать. Зачем? Что здесь происходит? Что еще я должен сделать, так как "eval is evil"?
В моем уме, без использования eval, я передаю URL как:
jQuery('#foo').setGridParam({url:foo_url}).trigger('reloadGrid');
но это терпит неудачу, так что, очевидно, здесь требуется eval?
Поскольку я уверен, что это слишком жесткий и неуклюжий способ сделать это, и в случае, если кто-то захочет увидеть это (и, возможно, предложить, как я делаю это неправильно?), Вот как я получаю это grid_id
:
// ex. id='foo_filter'
var source = $(this).parent().parent().attr('id').split('_');
var parsed_source = source.splice(1, source.length + 1);
grid_id_portion = '';
for (var i = 0; i < parsed_source.length; i++) {
grid_id += parsed_source[i];
if(i < parsed_source.length - 1){
grid_id += '_';
}
}
Некоторые проблемы, которые я вижу ... Я должен определить URL-адреса как переменные для каждой сетки. Это довольно негибко, да? Эти URL-адреса также очень похожи, поэтому их определение кажется неэффективным. Кроме того, что если кто-то создаст специальный фрагмент кода для вставки в качестве идентификатора, который я разбиваю на части, чтобы передать eval
. Это может быть плохой новостью, да? Будем весьма благодарны за любые предложения о том, как улучшить это.