更新仅发生在最后一行,而不是第一行

时间:2011-08-18 09:30:40

标签: javascript

function createTextFields(obj) {
    for (var i = 0; i < obj.length; i++) {
        var dataDump = {};
        for (var key in obj[i]) {
            var textField = Ti.UI.createTextField(pm.combine($$.labelBrown, {
            left: 200,
            height:35,
            value:obj[i][key],
            width:550,
            keyboardType:Ti.UI.KEYBOARD_NUMBER_PAD,
            layout:'horizontal',
            backgroundColor:'transparent',
            id:i
         }));

            dataDump[key] = textField.value;
            var callback = function (vbKey) {
                    return function (e) {
                        dataDump[vbKey] = e.source.value;
                    };
                }(key);
        }
        globalData.push(dataDump);
    }

}

我使用simlar代码添加数据,它工作正常。我昨天发布了这个问题并得到了解决......

Last Object is always getting updated?

现在,当我去编辑页面时,它会显示四个文本字段或添加的文本字段数...现在,当我编辑某些内容并单击“保存...”时,值将在第四个或最后一个TextFields对象上更新......

2 个答案:

答案 0 :(得分:1)

不要在循环内定义函数。计算成本高,导致问题,像这样。这是一个应该解决的问题:

function createTextFields(obj) {

     var callback = function (vbKey, localDump) {
                    return function (e) {
                        localDump[vbKey] = e.source.value;
                    };
                }
    var i;
    var max = obj.length;
    for (i = 0; i < max; i++) {
        var dataDump = {};
        for (var key in obj[i]) {
            dataDump[key] = textField.value;
            var callBackInstance = function(keyn, dataDump);
         }
        globalData.push(dataDump);
    }

}

答案 1 :(得分:1)

JavaScript没有块级范围,因此你的变量dataDumpcallback虽然在for循环中“声明”但实际上属于该函数。在中,您将值保存到dataDump,然后在每次循环时都覆盖它。这就是为什么最后只有最后一个值运行的代码仍然存在。

同时查看What is the scope of variables in JavaScript?