0

読んでくれてありがとう、

問題のコンテキスト:複数のアコーディオンパネルで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)ですが呼ばれます。または代替手段(Jquery?)ds1.filter(filterFunc)で呼び出される方法はありますか?evalディノスに感謝します

4

4 に答える 4

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勧めしません。)

于 2012-12-30T08:41:51.750 に答える
3

アクセスしようとしている変数がグローバルスコープにある場合は、次を使用できます。

var result = 'ds1';

window[result].filter(filterFunc);
于 2012-12-30T08:42:40.270 に答える
1

resultそれ自体の代わりにの値を使用するには、次の"result"ようにします。

eval (result+".filter(filterFunc)");

于 2012-12-30T08:41:42.527 に答える
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);
}
于 2015-06-20T22:51:48.863 に答える