2011-01-30 55 views
1

我正在使用我的Google Chrome擴展的contacts模塊。用戶可以添加和刪除聯繫人。一切都是用JavaScript和jQuery完成的。如何在物品刪除後更新標記?

這個問題更多的是關於邏輯,所以不要泄露代碼。

這是一個接觸是如何補充說:

function addContact(name){ 
var n = incContactNum(); 
chrome.extension.getBackgroundPage().setItem('contact'+n+'', name); 
contacts[n] = name; 
} 

接觸的總數應遞增的,所以我們現在有n接觸。此外我們更新contacts數組。

所以SQLite的項目表看起來是這樣的:

------------------------ 
| key   value | 
------------------------ 
| contactNum  3  | 
------------------------ 
| contact1  Test1 | 
------------------------ 
| contact2  Test2 | 
------------------------ 
| contact3  Test3 | 
------------------------ 

當行被刪除,例如第2行的表格看起來像這樣:

------------------------ 
| key   value | 
------------------------ 
| contactNum  2  | 
------------------------ 
| contact1  Test1 | 
------------------------ 
| contact3  Test3 | 
------------------------ 

就像你可以看到contactNum遞減。我們現在有兩個項目,但第二個有3作爲索引,但它應該從contact3更改爲contact2。當您看到我的刪除功能時,您可能會發現問題:

function removeContact(value){ 
contacts = new Array(getValue("contactNum")); 
for(i = 1; i <= parseInt(getValue("contactNum")); i++){ 
    if(getValue("contact"+i) == value){ 
    chrome.extension.getBackgroundPage().deleteItem("contact"+i); 
    decContactNum(); 
    break; 
    } 
} 
} 

項目按值刪除。所以我搜索相應的索引來刪除該行。由於聯繫人數目現在爲2,索引3永遠不會達到。

我的想法:第一次拆除工作,所以在指數應該重建。從被刪除的那個減少所有的指數。

任何想法如何做到這一點?

+0

您可能需要修改後臺頁面代碼,遞減的X,`contact'x'`爲'X> i`其中`i`是要刪除的項目。 – SuperSaiyan 2011-01-30 11:14:39

+0

是的,我知道,但如何?這裏是我的後臺頁面代碼http://jsfiddle.net/3jrv4/ – 2011-01-30 11:31:07

回答

1

你有兩個選擇。第一種選擇是我在你的問題下面的評論中提到的。

  • 修改後臺頁面中的代碼以減少要刪除的密鑰後面的每個密鑰。

function removeContact(value){ 
    var len = getValue("contactNum"); 
    var found = 0; 
    for(i = 1; i < len; i++){ 
     if(found==0 && getValue("contact"+i) == value){ 
      found=1; 
     } 
     if (found==1){ 
      chrome.extension.getBackgroundPage().setItem("contact"+i,getValue("contact"+(i+1))); 
     } 
    } 
    decContactNum(); 
    chrome.extension.getBackgroundPage().deleteItem("contact"+len); 
} 
  • 這個方法是好的只有當訂單犯規多的問題。用最後一條記錄交換要刪除的記錄(數據部分),然後按照發布代碼的方式刪除最後一條記錄。

function removeContact(value){ 
    var len = getValue("contactNum"); 
    for(i = 1; i <= len; i++){ 
     if(getValue("contact"+i) == value){ 
      chrome.extension.getBackgroundPage().setItem("contact"+i,getValue("contact"+len)); 
      break; 
     } 
    } 
    decContactNum(); 
    chrome.extension.getBackgroundPage().deleteItem("contact"+len); 
} 
相關問題