Titanium下划线添加从数组中删除项目

时间:2014-08-08 09:59:18

标签: arrays listview titanium underscore.js

我使用的是钛3.3和合金1.4.1。用户应该可以通过他手机的地址簿向所有选定的人(这些人在一个名为"联系人"的阵列中)发送电子邮件。

用户可以在列表视图中选择和取消选择其地址簿中的姓名/电子邮件(链接屏幕截图中的黄色背景)。

截图: http://s30.postimg.org/rsa82u9qp/listview_checkbox.png

当检查复选框时,从地址簿中提取正确的信息(电子邮件)并添加到联系人数组中。所以通过复选框选择工作,但当取消选中该复选框时,不会从数组中删除电子邮件/项目。请参阅最后一个日志输入行:

  

Ti.API.info(JSON.stringify(contacts)+"这是匹配数组的   端&#34);

之前选择但现在取消选择的电子邮件仍在contacts数组中。

我也发现了这一点,但遗憾的是它并没有帮助。

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");
});

任何想法我在这里做错了什么?

1 个答案:

答案 0 :(得分: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等于Email Person Object: {“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
   }
}