2015-06-22 82 views
1

我有一个复选框绑定到viewmodel的observable属性,它的值将是Y或N.我希望复选框在值为Y时进行检查,并且在值为N时取消选中。如何做到这一点?复选框被检查具有值Y

我能够实现它,如果值是0或1,但不是在Y和N.那么将有什么办法达到预期的行为有价值Y或N?

复选框代码如下:

<input type="checkbox" data-bind="checked: job.Open" /> 

回答

1

使用computed writable observable

var ViewModel = function() { 
 
    var self = this; 
 
    self.actualObservable = ko.observable('Y'); 
 
    self.relatedObservable = ko.computed({ 
 
    read: function() { return self.actualObservable() === 'Y'; }, 
 
    write: function(x) { self.actualObservable(!!x ? 'Y' : 'N'); } 
 
    }); 
 
}; 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<input type="checkbox" data-bind="checked: relatedObservable"> = Checked<br /> 
 
<i data-bind="text: actualObservable"></i> = Actual

你也只是绑定actualObservable的复选框,并计算的可观察只读。恕我直言,通常会更有意义,但这取决于你的上下文。该版本是这样的:

var ViewModel = function() { 
 
    var self = this; 
 
    self.actualObservable = ko.observable(true); 
 
    self.relatedObservable = ko.computed(function() { 
 
    return !!self.actualObservable() ? 'Y' : 'N'; 
 
    }); 
 
}; 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<input type="checkbox" data-bind="checked: actualObservable"> = Checked<br /> 
 
<i data-bind="text: relatedObservable"></i> = Actual