2011-01-30 12 views
1

Google Chromeの拡張モジュールcontactsで作業しています。ユーザーは連絡先を追加および削除できます。すべてがJavaScriptとjQueryで行われます。アイテムが削除された後、私はどのように指数を更新しますか?

この質問はロジックに関するものですので、コードによって落胆することはありません。

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

は、コンタクトの合計数がインクリメントされなければならないので、私たちは今n接点を持っている:

これは、連絡先が追加される方法です。連絡先配列を更新するだけでなく、

そこでSQLiteのアイテムテーブルは次のようになります行が削除されると、例えば、

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

2行目は次のようになります。

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

同様に、contactNumが減分されています。ここでは2つの項目がありますが、2番目の項目はインデックスとして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>のi'' i'が削除される項目であるためcontact'x'' 'でのxをデクリメントし、背景ページのコードを変更する必要があります。 – SuperSaiyan

+0

はい私は知っていますが、どうですか?ここに私のバックグラウンドページのコードhttp://jsfiddle.net/3jrv4/ –

答えて

1

2つのオプションがあります。最初のオプションはあなたの質問の下のコメントで私が言及したものです。

  • 背景ページのコードを変更して、削除するコードに続くすべてのキーを減らします。

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); 
} 
  • この方法では、順序がはるかに問題をdoesntの場合のみ、罰金です。最後のレコードで削除するレコード(データ部分)を交換して、最後にレコードを削除します。

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); 
} 
+0

ありがとう、これは素晴らしいです! –

関連する問題