2016-12-06 16 views
1

可以將多個函數綁定到Knockout中的checked事件,就像這段代碼片段一樣嗎?綁定到已檢查事件的多個函數

代碼片段:

<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> 

或者我只能綁定一個函數調用這個函數裏面兩個不同的功能?

回答

1

我認爲,在你的情況,你可以使用訂閱功能,遵循checkedRequestTypeId:

<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

2

不,你不能,不與內置的checked綁定。如果你真的想要一個(寫一個重用或分叉the built in binding),你可以寫一個custom binding handler,但是有一個更簡單的方法來獲得類似的東西。

我建議使用可寫的計算。無論如何,您都需要封裝雙向綁定位。換言之,請注意,您可以通過編程方式更改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's solution作爲解決這個問題的好方法。無論哪個最好取決於背景,真的。

相關問題