多个功能绑定到检查事件



可以将多个功能绑定到敲除中的检查事件,例如此代码段?

代码段:

<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,您可以通过编程方式更改checkedRequestTypeIdisRequestTypeIdChecked,并且您必须在这种情况下确定是否应检查复选框。

您尚未提供有关边缘案例逻辑的详细信息,但这是一个可以让您开始的示例:

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

最新更新