2013-04-06 4 views
9

名前+チェックボックスの一方向バインディングはうまく動作しますが、最初にviewTypeの値がtrueであるにもかかわらず、employeeTypeAラジオボタンでは機能しません。ラジオボタンが設定されていないため、なぜですか?knockoutはラジオボタンの最初の真の値を設定していません

<script type="text/javascript"> 

     $(function() 
     { 
      var PersonViewModel = function() 
      { 
       this.firstName = ko.observable('Lisa'); 
       this.lastName = ko.observable('T'); 
       this.isCustomer = ko.observable(true); 
       this.employeeTypeA = ko.observable(true); 
       this.employeeTypeB = ko.observable(false); 
      }; 

      var personViewModel = new PersonViewModel(); 
      ko.applyBindings(personViewModel, $('data').get(0)); 
     }); 
    </script> 

    <div id="data"> 
     <span data-bind="text: firstName"></span> 
     <span data-bind="text: lastName"></span> 
     <input type="checkbox" data-bind="checked: isCustomer" title="Is a customer" /> 
     <input name="x" type="radio" data-bind="checked: employeeTypeA" title="Employee type A" /> 
     <input name="x" type="radio" data-bind="checked: employeeTypeB" title="Employee type B" /> 
    </div> 

答えて

8

ドキュメントからのラジオボタンのための異なっchecked結合作品:ラジオボタンの場合

、KOがあればチェックする要素を設定し、パラメータ値はラジオボタンノードのと等しい場合にのみ、 value属性。

ですから、このような何かにあなたのPersonViewModelを変更する必要があります:あなたはemployeeTypeAを維持したい場合は

<input name="x" type="radio" data-bind="checked: employeeType" 
     value="TypeA" title="Employee type A" /> 
<input name="x" type="radio" data-bind="checked: employeeType" 
     value="TypeB" title="Employee type B" /> 

デモJSFiddle.

var PersonViewModel = function() 
{ 
    this.firstName = ko.observable('Lisa'); 
    this.lastName = ko.observable('T'); 
    this.isCustomer = ko.observable(true); 
    this.employeeType = ko.observable('TypeB');     
}; 

そして、あなたのラジオボタンあなたが紹介できるプロパティはemployeeTypeBですあなたはラジオボタンでvalue属性を追加する必要があり、この場合にも

this.employeeTypeA = ko.observable(false); 
this.employeeTypeB = ko.observable(true); 
this.employeeType = ko.computed(function() 
{ 
    if (this.employeeTypeA()) 
     return 'TypeA'; 
    if (this.employeeTypeB()) 
     return 'TypeB'; 
},this); 

:タイプを返す計算されたプロパティUCE。

デモJSFiddle.

+0

私はknockoutJSサイトをチェックし、チュートリアルを見て:直接ラジオボタンko.observable(真)が、私はwantsSpamはvisibilityプロパティにバインドされていることがわかりませんでした...ない:wantsSpam 。 ASP.NET MVCについても知っているように、このブール値をString型の 'Converter'と見なすのは、サーバー側のビューモデルでは、どのように見えるのですか? – Elisabeth

+0

ビジュアルスタジオのhtmlファイルに最後のコードブロックを置くと、2つのエラー/警告が表示されます。疑わしいこのオペレータを使用し、すべてのコードパスが値を返すわけではありません。 – Elisabeth

+0

私が持っているもう1つの質問は、「this.employeeTypeA」ではなく、「this.employeeTypeA()」を作成した理由です。私のjavascriptの初心者の知識は、従業員のタイプはプロパティですが、関数のように呼び出すのですか?これは批判的な質問ではありません:) – Elisabeth

関連する問題