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对象上更新......
答案 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没有块级范围,因此你的变量dataDump
和callback
虽然在for循环中“声明”但实际上属于该函数。在中,您将值保存到dataDump
,然后在每次循环时都覆盖它。这就是为什么最后只有最后一个值运行的代码仍然存在。