-1

こんにちは、次のコードがあります

var idx = 0;
var size = 0;
do {
    response.push({
        key: "data" + idx,
        ajaxOptions: function () {
            var data = this.getPref("groupsCN");
            var items = data.split(';');
            size = items.length;
            idx++;
            alert('inside index: ' + idx + ' < inside length ' + size);
            return {
                url: '/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
                type: "GET",
                dataType: "xml"
            }
        }
    });
    alert('outside index: ' + idx + ' < outside length ' + size);
} while (idx < size);

この関数getPrefは、いくつかの値を で割った文字列をロードします;。主なポイントは、このすべての値を繰り返し処理し、それらを使用して何かを行うことです。しかし、次のコード出力

外側のインデックス: 0 < 外側の長さ: 0

つまり、変数idxsizeは関数内で変更されません。しかし、私は理由を知りませんか?

this.getPref()外部では機能しないため、内部で呼び出す必要がありますajaxOptions -> function(理由はわかりませんが、この関数は Atlassian Gadget JavaScript フレームワークの一部です)。

4

2 に答える 2

2

関数を実行しているのではなく、匿名関数をオブジェクト リテラルのプロパティに割り当てているだけですajaxOptions。関数を実行するには、次のようなものを使用します。

var idx = 0;
var size = 0;
do {
    response.push({
        key: "data" + idx,
        ajaxOptions: (function () {
            var data = this.getPref("groupsCN");
            var items = data.split(';');
            size = items.length;
            idx++;
            alert('inside index: ' + idx + ' < inside length ' + size);
            return {
                url: '/rest/adrestresource/1.0/activedirectory/findgroups&test@lab.local&Bezhesla1&localhost&',
                type: "GET",
                dataType: "xml"
            }
        })()
    });
    alert('outside index: ' + idx + ' < outside length ' + size);
} while (idx < size);
于 2013-06-19T09:00:42.783 に答える
0

このようにしてみてください:

var idx = 0; var size = 0; var self = this;

var data = function () { return self.getPref("groupsCN"); };
于 2013-06-19T09:08:39.000 に答える