我有一个从我的 aspx 绑定(bind)到的可观察数组:
var contacts = ko.observableArray(),
当它被填充时,我将数组存储在哈希表中,这样我就不必再次从我的服务中检索值(这是一个非常缓慢的过程,所以如果我不想重新检索某些东西,我'之前已经检索过):
var toHash = contacts();
contactsHash[query] = toHash;
我的哈希表:
var contactsHash = {},
这是我的可观察数组在存储时的样子(键是一个字符串):
以下是我如何将其拉回:
if (contactsHash[query]) {
contacts.removeAll();
var retrieved = contactsHash[query];
contacts(retrieved);
}
这是我把它拉回来时的样子:
这显然给我带来了问题,因为可观察数组没有填充我之前存储的数组......也是一样的。谁能指出这里出了什么问题?
最佳答案
在 JavaScript 中,对象是通过引用传递的。当您调用 contacts.removeAll();
时,您还清除了 contactsHash[query]
,因为它们都指向内存中的同一个对象。
试试这个
contactsHash[query] = toHash.slice();
代替
contactsHash[query] = toHash;
编辑:
slice()
返回数组指定部分的浅拷贝。
关于javascript - 从 HashTable 存储和检索 KO ObservableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886761/