2015-10-28 2 views
1

Я пытаюсь сохранить ссылки на несколько текстовых полей в массиве. Когда я пытаюсь получить доступ к элементам массива, я получаю целые числа вместо объектов текстового поля! Я не могу понять, почему это происходит ...Titanium textField хранится как целое

var textfields = []; 
function doClick(e) {   
    var txtField = Ti.UI.createTextField({ 
     value:"test" 
    }); 
    textfields.push(txtField); 
    $.index.add(txtField); 

    for(var textfield in textfields) { 
     console.log("stored value : "+textfield); 
    } 
} 

$.index.open(); 

выхода после трех «щелчков»:

[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : stored value : 1 
[INFO] : ---click--- 
[INFO] : stored value : 0 
[INFO] : stored value : 1 
[INFO] : stored value : 2 

Когда я stringify весь массив, однако, я вижу TextField внутри, но я не» t знать, как получить к нему доступ. Вот массив с двумя TextFields внутри:

[ 
    { 
     "enabled":true, 
     "selection":{ 
     "length":0, 
     "location":0 
     }, 
     "backgroundRepeat":false, 
     "children":[ 

     ], 
     "rect":{ 
     "height":45, 
     "y":61, 
     "x":137, 
     "width":47 
     }, 
     "value":"voilà", 
     "visible":true, 
     "size":{ 
     "height":45, 
     "y":0, 
     "width":47, 
     "x":0 
     }, 
     "keepScreenOn":false, 
     "apiName":"Ti.UI.TextField", 
     "maxLength":-1, 
     "bubbleParent":true 
    }, 
    { 
     "enabled":true, 
     "selection":{ 
     "length":0, 
     "location":0 
     }, 
     "backgroundRepeat":false, 
     "children":[ 

     ], 
     "rect":{ 
     "height":45, 
     "y":107, 
     "x":137, 
     "width":47 
     }, 
     "value":"voilà", 
     "visible":true, 
     "size":{ 
     "height":45, 
     "y":0, 
     "width":47, 
     "x":0 
     }, 
     "keepScreenOn":false, 
     "apiName":"Ti.UI.TextField", 
     "maxLength":-1, 
     "bubbleParent":true 
    } 
] 

Из того, что я понимаю, textfield.value должен работать, но она возвращает «неопределенный», так как сам TextField это число ... Как я могу получить доступ к элементам I, хранящиеся в массив?

+0

Попробуйте вызвать TextField [ «значение»] –

+0

Это также не определено, но спасибо за попытку. – midemarc

+0

вы не должны стягивать текстовые поля! Просто прокрутите их и извлеките значение –

ответ

4

Ваш for...in неправильно ... Это должно быть:

for(var textfield in textfields) { 
    console.log("textfield : "+textfields[textfield]); 
    console.log("textfield : "+textfields[textfield].value); 
} 

for in устанавливает key в textfield, а не элемент.

Посмотрите документацию здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in#Array_iteration_and_for...in

еще лучший способ для цикла в титане (при использовании сплава) является underscore

_.each(textfields, function(textfield){ 
    console.log('textfield value:' + textfield.value); 
} 
+0

Большое спасибо, особенно для объяснения. Я должен был это посмотреть. – midemarc

+0

Добро пожаловать! –

2

Пожалуйста, попробуйте для каждого, а не для петли. См. Ниже код.

textfields.forEach(function(textField){ 
    console.log(textField.value); 
}); 
+0

для может работать, если все сделано правильно;) –

+0

Ваше решение также работает, спасибо! Я согласился с ответом Рене Пота, так как мне удобнее «за», и он немного объяснил. – midemarc

+1

Нет проблем, это вопрос предпочтения. Важно то, что вы должны получить желаемый результат. –

Смежные вопросы