2017-03-16 32 views
0

總是經過計算爲false

function AppViewModel() { 
 
    var thisModel = this; 
 
    
 
    thisModel.handleOnClick = function() { 
 
     console.log('checked: ', thisModel.settings.checked()); 
 
     
 
     //console.log('new value: ', newValue); 
 
     if(thisModel.settings.checked() === "checked"){ 
 
     thisModel.settings.checked(null); 
 
     }else{ 
 
     thisModel.settings.checked("checked"); 
 
     } 
 
    }; 
 

 
    thisModel.settings = { 
 
     checked: ko.observable("checked"), 
 
     onClick: thisModel.handleOnClick 
 
    }; 
 
    
 
    return thisModel; 
 
} 
 

 
ko.applyBindings(new AppViewModel());
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<input type="checkbox" data-bind="checked: settings.checked, click: settings.onClick">

的切換功能,handleOnClick壞了。無論如何,複選框都會被檢查。我在這裏做錯了什麼?

回答

1

如果您使用click綁定複選框,您的處理程序must return true,以便您不阻止默認操作(切換複選框)。

但是一般來說,不應該在複選框上使用click綁定。只需使用checked

function AppViewModel() { 
 
    var thisModel = this; 
 
    
 
    thisModel.settings = { 
 
     checked: ko.observable(true), 
 
    }; 
 

 
    thisModel.settings.checked.subscribe(function (value) { 
 
     console.log("checked: " + value); 
 
    }); 
 
    
 
    return thisModel; 
 
} 
 

 
ko.applyBindings(new AppViewModel());
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<input type="checkbox" data-bind="checked: settings.checked">