我正在使用一种方法来接受元素ID的一部分,并使用它来确定我需要传递给方法的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');
});
可能的网址被定义为变量,所以我有类似的东西:
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
,那么网址将不起作用。为什么?这里发生了什么?自“eval是邪恶的”以后我还应该做些什么呢?
在我看来,不使用eval,我传递的网址如下:
jQuery('#foo').setGridParam({url:foo_url}).trigger('reloadGrid');
但这失败了,所以这里显然需要评估?
因为我确信这太过于僵硬和笨拙的方式来做这件事,以防万一有人想看到它(也许暗示我这样做是怎么回事?),这就是我如何得到那个{{1 }}:
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 += '_';
}
}
的ID。这可能是坏消息,是吗?任何有关如何改进的建议都将不胜感激。