2011-12-12 44 views
2

我無法獲得一個簡單的dependentObservable鏈在knockout.js中工作。這裏是我的代碼:無法獲取knockout.js依賴可觀察鏈接工作

var viewModel = { 
    didWork: ko.observable(''), 
    stillWorking: ko.observable(''), 
    didYouQuit: ko.observable('') 
}; 

viewModel.stillWorkingVisible = ko.dependentObservable(function() { 
    return this.didWork() == 'Yes'; 
}, viewModel); 

viewModel.didYouQuitVisible = ko.dependentObservable(function() { 
    alert('ok'); 
    return this.stillWorkingVisible() == 'Yes' && this.stillWorking() == 'No'; 
}, viewModel); 

ko.applyBindings(viewModel); 

<ul> 
    <li>Did you do any work?<br /> 
     <input type="radio" name="didWork" value="No" data-bind="checked: didWork" />&nbsp;No 
     <input type="radio" name="didWork" value="Yes" data-bind="checked: didWork" />&nbsp;Yes 
    </li> 
    <li data-bind="visible: stillWorkingVisible">Are you still working?<br /> 
     <input type="radio" name="stillWorking" value="No" data-bind="checked: stillWorking" />&nbsp;No 
     <input type="radio" name="stillWorking" value="Yes" data-bind="checked: stillWorking" />&nbsp;Yes 
    </li> 
    <li data-bind="visible: didYouQuitVisible">Did you quit?<br /> 
     <input type="radio" name="didYouQuit" value="No" data-bind="checked: didYouQuit" />&nbsp;No 
     <input type="radio" name="didYouQuit" value="Yes" data-bind="checked: didYouQuit" />&nbsp;Yes 
    </li> 
</ul> 

每當「你還在」無線電被選中,didYouQuitVisible dependentObservable似乎從來沒有更新或火災。我在那裏有一個alert(),並且每當「你還在工作」的收音機被選中/取消選中時,警報都不會彈出。但是,當第一個無線電組被選中/取消選中時,警報會顯示。第一個dependentObservable(stillWorkingVisible)工作得很好。想法?

+1

非常有趣。不知道爲什麼這不工作..我在這裏做了一個JS小提琴的代碼:http://jsfiddle.net/xYqKP/ – jmacinnes

回答

3

您的代碼似乎是錯了這一說法:

return this.stillWorkingVisible() == 'Yes' 

stillWorkingVisible()絕不會返回一個字符串「是」,但一個bool

編輯

fiddle似乎與預期修復工作。

+0

gah!感謝捕捉。 – kindohm