0

为什么这这么难?我想要的只是 Phonegap 联系人 API 中的字段名称列表。您会认为这没什么大不了的,但实际上,这几乎是 Phonegap 文档的一个普遍问题:没有方法采用的参数的详细信息。这些示例并不详尽,这使用户不得不去别处寻找。

所以我去了http://www.w3.org/TR/2010/WD-contacts-api-20100121/#widl-ContactProperties-name并看到标准字段是姓名、昵称、电话、电子邮件和地址。嗯!让我们看看这是否有效:

var fieldArray = new Array('name','displayName','phoneNumbers','addresses','emails');

for (i=0;i

for(j = 0; j < fieldArray.length; j++){

alert("Field Name: "+fieldArray[j]+"\n Data: "+contacts[i].name[0]+"\n Data: "+contacts[i].displayName);

alert("\n Name:  "+contacts[i].name[0]);    

}

}

不是机会。特别是,第二个警报 - contacts[i].name[0] - 是我最感兴趣的一个。它只是返回“未定义”。试过这个:contacts[i].name[0].value。纳达。

所以问题:联系人列表中的字段名称是什么,Phonegap 中有联系人的人可以要求他们对他们文档的糟糕状态做些什么。我会自愿参加,但我没有必要的 Phonegap 知识来完成这项工作。

4

2 回答 2

1

该应用程序是这样的:出于性能原因,我想将我的所有联系方式都放在 SQLite 数据库中,并允许我更轻松地操作数据。因此,我提取了所有联系人:

var options = new ContactFindOptions();

options.filter=""; // Note empty filter will pick up all contacts

options.multiple = true;

var fields = ["*"]; // Picks up all fields

navigator.contacts.find(fields, findSuccess, onError, options);

然后,我将其全部保存在具有选定字段名称的数据库中:displayNmae、phoneNumbers、addresses、emails。我真正想做的事情是遍历所有字段并将大量内容保存在数据库中,并使用这样的例程findSuccess 回调函数:

var contactsArray=new Array();
var contactFieldsArray = new Array('displayName','firstName','lastName' ...);
for(var i = 0; i < contacts.length;i++){
   for(var j = 0; j < contactFieldsArray.length; j++){
      if(contactFieldsArray[j].match(/(phoneNumbers)|(emails)/i){
         contactsArray,push(contacts[i].contactFieldsArray[j][0].value);
      }else{
          contactsArray.push(contacts[i].contactFieldsArray[j]);      
      }
   }
}

不幸的是,这需要一些可用字段的 id。它必须比出现时更容易。

于 2012-05-23T06:18:30.387 回答
0

首先,您正在查看 W3C 联系人规范的旧版本。你会想看看这个:

http://www.w3.org/TR/contacts-api/

至于您关于联系人中哪些字段名称的问题,它们列在联系人对象下的文档中。如果您想创建联系人,请不要使用“new Contact()”,而是使用navigator.contacts.create()。基本上,您将对象文字传递给该方法,它会从您的对象中提取匹配的属性并填充联系人。

我不确定您如何在示例中使用联系人数组,但如果您使用navigator.contacts.find()您需要指定find 应返回哪些联系人字段。这是根据 W3C 规范,我不完全同意,但我们尝试按照规范编写代码。

希望能回答您的问题,如果它不只是 ping 我,我会尽力回答。

于 2012-05-23T01:09:39.717 回答