我是 KnockoutJS 的新手,很想知道这是否可能。我正在尝试将本地存储对象包装在可写计算中,以便我可以利用 KnockoutJS 的自动绑定优势。但是,“读取”操作不引用任何可观察对象 - 因此初始值永远不会更新:
<select data-bind="foreach: logLevelsArray, value: currentLogLevel">
<option data-bind="attr: { value: $index() }, text: $data"></option>
</select>
_.extend(DevUtilitiesViewModel.prototype, {
...
logLevelsArray: ['error', 'warning', 'info', 'debug'],
currentLogLevel: ko.computed({
read: function() {
return localStorage.getItem("logger-level");
},
write: function( newValue ) {
localStorage.setItem("logger-level", newValue);
}
})
...
});
DevUtilitiesViewModel.currentLogLevel(); // 2 (default)
DevUtilitiesViewModel.currentLogLevel(4);
localStorage.getItem("logger-level"); // 4 - write was successful
DevUtilitiesViewModel.currentLogLevel(); // 2 - still the original value
我了解这是预期的行为,并且我了解原因。我也明白我可以制作currentLogLevel
一个简单的 observable 并订阅它并以这种方式更新本地存储。但是我必须跟踪订阅并手动处理它,编写更多代码等等。我只是想看看是否有办法做我想做的事情:为本地存储提供一个可观察的 getter/setter。