2014-08-08 2 views
0

Я использую титан 3.3 и сплав 1.4.1. пользователь должен иметь возможность отправлять электронное письмо всем выбранным людям (эти люди находятся в массиве под названием «контакты») из адресной книги его телефона.Титан подчеркивает добавление удаляемых элементов из массива

Пользователь может выбрать и отменить выбор имен/электронных писем из своей адресной книги в виде списка (желтый фон в связанном скриншоте).

скриншот: http://s30.postimg.org/rsa82u9qp/listview_checkbox.png

правильная информация (адрес электронной почты) протягивается из адресной книги и добавляется к массиву контактов, когда один проверяет флажок. поэтому выбор с помощью флажка работает, но если отменить выбор флажка, адрес/элемент не будет удален из массива. увидеть последнюю запись журнала строку:

Ti.API.info (JSON.stringify (контакты) + "это соответствует массив на конце");

адрес электронной почты, который был выбран ранее и в настоящее время отменен, по-прежнему находится в массиве контактов.

Я также нашел это, но он не помогает, к сожалению.

http://developer.appcelerator.com/question/163878/loop-through-listview-to-grab-items-with-certain-properties#comment-206400

код:

$.listview.addEventListener('itemclick',function(e){ 
var item = e.section.getItemAt(e.itemIndex); 
if (item.properties.accessoryType == Ti.UI.LIST_ACCESSORY_TYPE_NONE) { 
    item.properties.accessoryType = Ti.UI.LIST_ACCESSORY_TYPE_CHECKMARK; 
    Ti.API.info(item.textEmail.text + " this is item.textEmail.textinside adding if"); 
    var added = item.textEmail.text; 
    if (!_.contains(contacts,added)) {contacts.push(added); 
} 
    Ti.API.info(JSON.stringify(added) + " item 1 added"); 
    Ti.API.info(contacts + " this is matches array inside adding if"); 
} 
else { 
    item.properties.accessoryType = Ti.UI.LIST_ACCESSORY_TYPE_NONE; 
    var removed = item.textEmail.text; 
    contacts = _.without(contacts, removed); 
    //contacts.splice(removed); 
    Ti.API.info(JSON.stringify(removed) + " item 2 removed"); 
    Ti.API.info(JSON.stringify(contacts) + " this is contacts in removing if case"); 
} 
e.section.updateItemAt(e.itemIndex, item); 
Ti.API.info(JSON.stringify(contacts) + " this is matches array at the end"); 
}); 

любые идеи, что им делать неправильно здесь?

ответ

0

Во-первых, вы должны иметь плоский массив (контакты):

var contacts = new Array(); 

...

Затем добавить/удалить свойства textEmail.text и искать их правильно

if (item.properties.accessoryType == Ti.UI.LIST_ACCESSORY_TYPE_NONE) 
{ 
    item.properties.accessoryType = Ti.UI.LIST_ACCESSORY_TYPE_CHECKMARK; 
    var i; 
    for(i in item.textEmail.text) //item.textEmail.text is Object 
    { 
     if(contacts.indexOf(item.textEmail.text[i]) === -1) 
     { 
      contacts.push(item.textEmail.text[i]); 
      Ti.API.info(item.textEmail.text[i] + " item added"); 
     } 
    } 
    Ti.API.info(contacts + " this is matches array inside adding if"); 
} 
else 
{ 
    item.properties.accessoryType = Ti.UI.LIST_ACCESSORY_TYPE_NONE; 
    var i; 
    for(i in item.textEmail.text) 
    { 
     var p = contacts.indexOf(item.textEmail.text[i]); 
     if(p !== -1) 
     { 
      contacts.splice(p,1); 
      Ti.API.info(item.textEmail.text[i] + " item removed"); 
     } 
    } 
    Ti.API.info(contacts + " this is contacts in removing if case"); 
} 

// если item.textEmail.text равен элементу электронной почты Объект: {"work": ["...", "..."], "home": ["...", "..."] }

var i, j; 

for(i in item.textEmail.text) 
{ 
    for(j = 0; j < item.textEmail.text[i].length; j++) 
    { 
     // Start Add Code 
     if(contacts.indexOf(item.textEmail.text[i][j]) === -1) 
     { 
      contacts.push(item.textEmail.text[i]); 
     } // End Add Code 

     // Start Remove Code 
     var p = contacts.indexOf(item.textEmail.text[i]); 
     if(p !== -1) 
     { 
      contacts.splice(p,1); 
     } // End Remove Code 
    } 
} 
+0

Hola Alejandro, большое спасибо за ваш быстрый ответ. ive попробовал опубликованный вами фрагмент - теперь он удаляет элементы, но не правильные. Я также заметил, что поле электронной почты (item.textEmail.text) является полем с несколькими значениями (некоторые из них имеют домашний и адрес электронной почты). я проверил, и исходный код работает (включая функцию удаления) с полями «recordID» и «fullName» (одно значение). – user24957

+0

http://s30.postimg.org/tmpyrfrv5/array.png вот еще один снимок экрана – user24957

+0

Splice возвращает удаленный элемент, извините за эту небольшую деталь. –

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