非常感谢阅读,
问题背景:在多个手风琴组中使用spry的搜索功能。
我正在尝试使用eval
(因为这是我能想到的唯一方法)来完成这个简单的事情:
var ds1 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz1.php",'root/row]');
var ds2 = new Spry.Data.XMLDataSet("ajaxxmllogdaneiz2.php",'root/row]');
var str1="ds";
var str2= 1;
var result= str1.concat(str2);
//result is now ds1
eval ("result.filter(filterFunc)");
我希望调用ds1.filter(filterFunc)
,但调用result.filter(filterFunc)
。
有没有办法用ds1.filter(filterFunc)
或替代方法(Jquery?)调用eval
?
非常感谢
迪诺斯
答案 0 :(得分:4)
你应该使用这个:
eval(result + ".filter(filterFunc)");
但你真的应该考虑而不是 eval
。我不明白为什么这是可取的。如果必须,我建议将要操作的变量存储在已知位置。例如:
var Foo = function() {
return {
"bar": function() {
console.log("baz");
}
}
};
var foo_list = {};
foo_list["foo"] = Foo();
var part_1 = "fo";
var part_2 = "o";
foo_list[part_1 + part_2].bar();
(你也可以用这种方式将它存储在window
中,但我也会反对这一点。)
答案 1 :(得分:3)
如果您尝试访问的变量位于全局范围内,则可以使用:
var result = 'ds1';
window[result].filter(filterFunc);
答案 2 :(得分:1)
要使用result
而不是"result"
本身的值,您可以执行以下操作:
eval (result+".filter(filterFunc)");
答案 3 :(得分:0)
除了执行完全任意的代码之外,你不需要使用eval。
您可能希望将XMLDataSet
存储在数组中。
var datasets = [];
for (var n=1; n<=2; n++) {
datasets.push(new Spry.Data.XMLDataSet("ajaxxmllogdaneiz" + n + ".php", "root/row"));
}
for (var i=0; i<datasets.length; i++) {
var ds = datasets[i];
ds.filter(filterFunc);
}