可以将多个功能绑定到敲除中的检查事件,例如此代码段?
代码段:
<input type="radio" name="requestType" data-bind="value: id, checked: checkedRequestTypeId, isRequestTypeIdChecked" />
<script type="text/javascript">
var viewModel = function() {
//...
checkedRequestTypeId = ko.observable();
isRequestTypeIdChecked = function(){
//some logic inside
}
//...
};
ko.applyBindings(new viewModel());
</script>
或我只能绑定一个函数并在此功能中调用两个不同的功能?
no,您不能使用内置的checked
绑定。如果您真的想要一个自定义的绑定处理程序(写一个重新使用或叉子内置的绑定),但是有一种更简单的方法可以得到类似的东西。
我建议使用可写的计算。无论如何,您都需要封装双向绑定位。换句话说,NETIDCE,您可以通过编程方式更改checkedRequestTypeId
和isRequestTypeIdChecked
,并且您必须在这种情况下确定是否应检查复选框。
您尚未提供有关边缘案例逻辑的详细信息,但这是一个可以让您开始的示例:
function ViewModel() {
var self = this;
self.checkedRequestTypeId = ko.observable(false);
self.isRequestTypeIdChecked = ko.observable(true);
self.requestTypeCheckedness = ko.computed({
read: function() {
return self.checkedRequestTypeId() && self.isRequestTypeIdChecked()
? "1"
: "2";
},
write: function(newVal) {
self.checkedRequestTypeId(newVal === "1");
self.isRequestTypeIdChecked(newVal === "1");
}
});
}
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input type="radio" name="requestType" value="1" data-bind="checked: requestTypeCheckedness" /> 1
<br>
<input type="radio" name="requestType" value="2" data-bind="checked: requestTypeCheckedness" /> 2
<hr>
Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
ps。我还支持Stanislav Machel的解决方案,这是解决此问题的好方法。最佳的哪个实际上取决于上下文。
我认为,在您的情况下,您可以使用订阅函数进行检查scheckedrequesttypeid:
<input type="radio" name="requestType" data-bind="value: id, checked: checkedRequestTypeId, isRequestTypeIdChecked" />
<script type="text/javascript">
var viewModel = function() {
//...
checkedRequestTypeId = ko.observable();
this.checkedRequestTypeId.subscribe(function(){
//some logic inside
}
};
ko.applyBindings(new viewModel());
</script>
我希望我的答案能为您提供帮助。您可以在此处阅读更多详细信息:http://knockoutjs.com/documentation/observables.html