-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()inside ajaxOptions -> function,因为它在外面不起作用(我不知道为什么,这个函数是 Atlassian gadget JavaScript 框架的一部分)

4

2 回答 2

2

您没有执行函数,只是匿名函数分配给对象文字的 property 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 回答