В моей модели с нокаутом у меня есть некоторые свойства, где я пытаюсь сделать хэш наблюдаемым. Так что вместо моего предварительного Knockout кодаКак вы смотрите JavaScript hashtables в 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("&") : "";
});
Я собираюсь предположить, что это происходит потому, что Нокаут наблюдаемыми должны быть простыми переменными (или observableArrays), и что это не обнаруживающие основные изменения в моей хэш-таблице.
Если да, есть ли другие варианты? Почему в нокауте нет наблюдаемого типа Hash?
Для чего это необходимо, моим обходным решением является наличие наблюдаемого массива ключей и обычного хэш-таблицы JavaScript для поиска значений. Затем я изменил свой вычислительный метод, чтобы наблюдать массив ключей, а не другую переменную хэш-таблицы, которую я имел раньше. Я просто хочу убедиться, что я не пропущу «Правильный путь», чтобы сделать это в Knockout.
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("&") : "";
});
Есть ли способ, чтобы наблюдать Hashtable? Я хочу иметь возможность делать ключевые поиски – mcintyre321