在我的 Knockout 视图模型中,我有一些属性试图使哈希可观察。所以而不是我的预淘汰代码
self.MyHash = {};
我现在正在使用:
self.MyHash = ko.observable({});
在代码的其他部分,我使用如下语句来操作哈希:
// add an entry
self.MyHash()["test"] = "My Value";
// remove an entry
delete self.MyHash()["test"];
该代码有效,因为条目被正确添加和删除。但是,观察哈希表的代码区域似乎没有检测到对哈希表的更改。例如,当我更改哈希表时,这个计算的可观察量永远不会运行:
self.Querystring = ko.computed(function ()
{
var f = [];
$.each(self.MyHash(), function (k, v)
{
f.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));
});
return (f.length > 0) ? f.join("&") : "";
});
我猜测这是因为 Knockout observables 需要是简单变量(或 observableArrays),并且它没有检测到我的哈希表的底层更改。
如果是这样,还有其他选择吗?为什么 Knockout 中没有 observableHash 类型?
就其价值而言,我的解决方法是使用一个 observableArray 键和一个常规 JavaScript 哈希表来查找值。然后我更改了计算方法来观察键数组而不是之前的其他哈希表变量。我只是想确保我没有错过在淘汰赛中做到这一点的“正确方法”。
self.MyHashKeys = ko.observableArray();
self.MyHash = {};
self.Querystring = ko.computed(function ()
{
var f = [];
$.each(self.MyHashKeys(), function (index, value)
{
f.push(encodeURIComponent(value) + '=' + encodeURIComponent(self.MyHash[value]));
});
return (f.length > 0) ? f.join("&") : "";
});