javascript - 从 HashTable 存储和检索 KO ObservableArray

标签 javascript knockout.js

我有一个从我的 aspx 绑定(bind)到的可观察数组:

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

这显然给我带来了问题,因为可观察数组没有填充我之前存储的数组......也是一样的。谁能指出这里出了什么问题?

最佳答案

在 JavaScript 中,对象是通过引用传递的。当您调用 contacts.removeAll(); 时,您还清除了 contactsHash[query],因为它们都指向内存中的同一个对象。

试试这个
contactsHash[query] = toHash.slice();

代替
contactsHash[query] = toHash;

编辑:
slice() 返回数组指定部分的浅拷贝。

关于javascript - 从 HashTable 存储和检索 KO ObservableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886761/

相关文章:

javascript - 如何连接文本绑定(bind)中使用的可观察值的值?

javascript - Typescript 中此子范围的问题

javascript - 在 JS 中使用 Curry 函数

javascript - 表单加载提交后重定向

javascript - sapui5 - 如何从 SegmentedButton 隐藏一个按钮?

JavaScript 语法困惑

JavaScript 显示/隐藏按钮

binding - 有没有办法找出 knockout 模型中的哪些变量当前绑定(bind)到 DOM?

javascript - Knockout JS模型继承

javascript - knockout 绑定(bind)不初始化,从更新开始