使用eval为方法分配变量。我该怎么办?

时间:2012-01-24 08:31:14

标签: javascript jquery jqgrid eval

我正在使用一种方法来接受元素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&param=1';
var bar_url = url_path + '?input=moduleone&param=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。这可能是坏消息,是吗?任何有关如何改进的建议都将不胜感激。

0 个答案:

没有答案