3
我有一個公共屬性的對象:無法獲得Knockout.js更新可觀察的對象屬性
function MyClass() {
var self = this;
self.test = 'foo';
self.changeTest = function() {self.test = 'bar';}
}
var myobj = new MyClass();
該屬性可以通過某些對象的方法,並從「外部」進行訪問。現在,如果我創建和綁定這樣的視圖模型:
function AppVMClass() {
var self = this;
self.obs_obj = ko.observable(myobj);
}
var vmodel = new AppVMClass();
ko.applyBindings(vmodel);
然後調用myobj.changeTest()
不會改變的可觀測值。 也就是說如果我在HTML頁面中有這樣的內容: < div data-binding="text: obs_obj().test"></div>
即使在調用myobj.changeTest()
而不是更新後,它也會顯示「foo」。
我在做什麼錯?
謝謝!我認爲Knockout使用了一些JS內省功能來檢查可觀察值是否已經改變(並且在ko.observable函數中附加了改變監聽器)。雖然你的答案更有意義。 – monday
@monday:作爲一個有趣的說明,其他一些JS庫選擇正確地使用這種髒數據綁定檢查 - 即AngularJS。 – voithos
知道在需要修改observable成員的(罕見)情況下,您可以告訴Knockout可觀察對象已經使用myobj.valueHasMutated()進行了變異,這也很有用。 –