Nel mio viewmodel Knockout, ho alcune proprietà in cui sto cercando di rendere un hash osservabile. Così, invece del mio codice pre-Knockout diCome si osservano gli hash JavaScript in Knockout?
self.MyHash = {};
ora sto usando:
self.MyHash = ko.observable({});
In altre parti del mio codice, sto manipolando l'hash con affermazioni come queste:
// add an entry
self.MyHash()["test"] = "My Value";
// remove an entry
delete self.MyHash()["test"];
Il codice funziona, in quanto le voci vengono aggiunte e rimosse correttamente. Tuttavia, le modifiche alla tabella hash non sembrano essere rilevate dalle aree del codice che la stanno osservando. Ad esempio, questa calcolato osservabile non finisce mai quando sto cambiando la tabella hash:
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("&") : "";
});
sto andando a indovinare che questo è perché osservabili Knockout sono tenuti ad essere variabili semplici (o observableArrays), e che non è rilevare il modifiche sottostanti al mio hashtable.
Se sì, ci sono altre opzioni? Perché non c'è un tipo Hash osservabile in Knockout?
Per quello che vale, la mia soluzione è di avere un array osservabile di chiavi e un normale hash JavaScript per cercare i valori. Poi ho cambiato il mio metodo calcolato per osservare la serie di chiavi piuttosto che l'altra variabile hashtable che avevo prima. Voglio solo assicurarmi che non manchi "The Right Way" per farlo in 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("&") : "";
});
C'è un modo per osservare una tabella hash? Voglio essere in grado di fare ricerche chiave – mcintyre321