2011-03-01 115 views
0

我有一個可編輯的網格,商店和一個按鈕。 按鈕有應該拷貝複製所選記錄並添加到存儲的處理程序:將記錄添加到商店

var a = gridPanel.getSelectionModel().getSelectedCell(); 

    var rec = store.getAt(a[0]).copy(); 
    store.addSorted(rec); 
    alert (store.getAt(1).get('date')); 

但不更新實體店和網格。該警報有一個錯誤 - 無法調用未定義的方法。

這裏有什麼問題?

回答

1

問題可能在於,複製的記錄具有相同的ID,因此當您將其插入存儲區時,具有相同ID的另一個記錄已存在。

如果您在將新記錄添加到商店之前生成並應用新的ID,它應該可以工作。以下代碼在作爲參數傳遞的記錄中生成一個新的ID。檢查Ext.data.Record.copy的文檔。

Ext.data.Record.id(rec); 
0

幾件事情,大多數JavaScript開發人員應該做的:

  1. 使用Firebug,如果你打開所有的錯誤決裂它可能會告訴你,store.get(1)將返回undefing和當您嘗試調用未定義的函數時導致錯誤。

  2. 現在你已經有firebug在window.alert()上使用console.log()語句。通過console.log,你可以真正看到它檢查它,它也適用於異步的東西和鼠標事件。

至於你的問題: 調用record.copy(),然後將其插入到店會造成問題,如果你不給它一個id。如果你有螢火蟲,並通過代碼看,你會偶然發現這一點:

if(this.containsKey(key)){ 
this.suspendEvents(); 
this.removeKey(key); 
this.resumeEvents(); 
} 

要生成一個記錄了一個獨特的鍵,你可以做這樣的事情:

var rec = store.getAt(a[0]).copy(); 
var id = Ext.data.Record.id(id); 
rec.id = id; 

代碼似乎混亂,但有並不是很好的做法。如果是我,我會覆蓋複製函數採取布爾值來強制自動生成記錄的ID。

+0

謝謝您的建議。我使用鉻「檢查元素」 - 適合我。雖然我不明白爲什麼,但我知道錄音不是插入的。 – lvil