2014-02-19 149 views
3

檢索KO ObservableArray我有一個觀察的數組,我從我的aspx結合:存儲和從哈希表

var contacts = ko.observableArray(), 

當這種填充,我存儲在一個哈希表中的數組,所以我不需要檢索再次我的服務的價值(這是一個非常緩慢的過程,所以如果我不希望重新找回的東西我已經之前檢索):

var toHash = contacts(); 
contactsHash[query] = toHash; 

我的哈希表:

var contactsHash = {}, 

這裏是我觀察到的陣列看起來它被存儲時一樣(主要是字符串):

toHash

以下是我拉回來了:

if (contactsHash[query]) { 
    contacts.removeAll(); 
    var retrieved = contactsHash[query]; 
    contacts(retrieved); 
} 

和這裏的什麼看起來像當我把它拉回去時:

enter image description here

這顯然會導致我的問題,因爲可觀察數組沒有得到填充我之前存儲的數組的填充...因此,有些東西在兩者之間被糟,了,我已經確定他們的密鑰我正在存儲和訪問是同樣如此。任何人都可以指出這裏有什麼問題嗎?

回答

3

在JavaScript中,對象通過引用傳遞。當您撥打contacts.removeAll();時,您也正在清除contactsHash[query],因爲它們都指向內存中的同一個對象。

嘗試的這個
contactsHash[query] = toHash.slice();

代替
contactsHash[query] = toHash;

編輯:
slice()返回數組的指定部分的淺表副本。

+3

'toHash.slice()'克隆數組,因此它不再引用原始數組。 – iConnor

3

由於對象在JavaScript中通過引用傳遞的事實,元素正在消失。清除另一個清除。

+1

謝謝你的迴應,儘管我不得不接受eazimmerman的完整性。 – tnw