我很確定我錯過了上下文的某些內容,但我無法弄清楚是什麼。
我有以下視圖模型:
var ViewModel = function(){
var self = this;
self.person = ko.observable();
self.isPerson = ko.observable();
self.person.subscribe(function(value){
self.isPerson('firstName' in value);
});
};
var vm = new ViewModel();
var personA = { };
var personB = { firstName: ko.observable("hello") };
vm.person(personA);
ko.applyBindings(vm);
setTimeout(function(){ vm.person(personB); }, 1000);
及以下觀點:
<span data-bind="with: person">
<!-- ko if: $root.isPerson -->
<span data-bind="text: firstName"></span>
<!-- /ko -->
</span>
一旦超時執行,我期望在中顯示的的firstName但是,我收到以下錯誤:
firstName is not defined;
如果我從viewModel中的personB開始,它就可以工作。如果我將if語句移動到with語句之上,它將起作用。
我在這種情況下做錯了什麼?
更新JSFiddle
你想達到什麼目的?這是一個奇怪的淘汰賽模式,你正在使用... –
我認爲*你的代碼是遵循這個執行路徑。 1.創建人視圖模型作爲可觀察到的,isPerson作爲可觀察和訂閱變化的人 2.把一個空物體插入人 3.將綁定與某甲 您的視圖模型4.超時,這次用一個沒有訂閱的全新可觀測數據覆蓋你的人。 5.執行上一個對象(不帶firstName)的訂閱函數。 –
對不起,這是一個有點人爲的例子。最初,我有兩個稍微不同的對象,並且需要viewModel上的'person'來處理這兩個對象。 (更好的例子可能是personA = Customer和personB = Employee)。然後它開始擾亂我,我無法弄清楚它爲什麼不起作用。 –