我需要在保存后取回联系人ID,以便将其保存到我的在线数据库中。但是,cordova contact.save()方法在执行后不会返回id。
这是我的逻辑:
if ($scope.contact.id === undefined) {
contact.save();
var savedContact = navigator.contacts.find({ "phoneNumbers[0]": phoneNumbers[0].value });
console.log("Contact ID is:", savedContact.id);
table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}
这不起作用。
有没有办法检索联系人的ID,而无需使用这样的电话号码搜索电话联系人列表:
QUOTIENT(+A1:A3,4)
WORKDAY(+A1:A3,7)
以上看起来似乎太过分了。更不用说它可能甚至没有返回正确的联系人,因为电话号码可能不是唯一的。(如果有人用不同的信息保存了两次联系人)
答案 0 :(得分:1)
contact.save()
可以进行两次回调,成功和失败。成功回调应该返回新保存的联系人(包括id。)
if ($scope.contact.id === undefined) {
contact.save(contactSuccess, contactFailure);
}
function contactSuccess(newContact) {
console.log("Contact ID is:", newContact.id);
table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}
function contactError(err) {
//bb10 fires multiple error callbacks with empty errors
if (err) {
console.log(err);
}
}
由于看起来您正在使用Angular,请查看ngCordova项目。它为一些插件提供了一些不错的包装器,使一切都更具可读性。以下是their contacts docs的相关摘录:
$cordovaContacts.save($scope.contactForm).then(function(savedContact) {
console.log("Contact ID is:", newContact.id);
table.insert({ id: contact.id.value, firstname: name.givenName, lastname: name.familyName, homephone: phoneNumbers[0].value, mobilephone: phoneNumbers[1].value, email: emails[0].value });
}, function(err) {
if (err) {
console.log(err);
}
});