2013-04-06 20 views
9

Adlar + onay kutusu için 1 yollu bağlantı düzgün çalışır, ancak başlangıçta viewmodel değerinde true olmasına rağmen, employeeTypeA radyo düğmesi için işe yaramaz. radyo düğmesi ayarlanmadı, neden bu?knockout, radyo düğmesindeki ilk gerçek değeri ayarlamaz

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

cevap

8

belgelerinden radyo düğmeleri için farklı checked bağlama işleri:

radyo düğmeleri için

, KO elemanı ayarlayacaktır kontrol edilecek ve eğer parametre değeri radyo düğmesi düğümün eşittir yalnızca value özniteliği.

Yani böyle bir şey için PersonViewModel değiştirmeniz gerekir:

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

Ve radyo düğmeleri:

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

Demo JSFiddle.

Eğer employeeTypeA tutmak istiyorsanız ve girebileceğiniz employeeTypeB özellikleri türünü döndüren bir bilgisayarlı özelliğini UCE:

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

Ayrıca bu durumda, size radyo düğmelerini value özellikler eklemek gerekir. Demo JSFiddle.

+0

Ben knockoutJS sitesini kontrol ve öğretici baktı: wantsSpam: ko.observable (doğru), ama wantsSpam ... Bir görünürlük özelliğine bağlı olduğunu görmedik doğrudan değil radyo düğmesi . ASP.NET MVC hakkında da bildiğiniz gibi, sunucu Boyu Görüntüleyiciyi sunucu tarafındaki viewmodel'deki 'Dönüştürücü' olarak düşünmek daha iyi bir fikir olmaz mı ?! – Elisabeth

+0

Son kod bloğumu görsel stüdyo html dosyasına koyduğumda 2 hata/uyarı alırım: şüpheli bu operatörü kullanır ve tüm kod yolları bir değer döndürmez. – Elisabeth

+0

Elimde bir başka soru şudur: "this.employeeTypeA()" ve "this.employeeTypeA" değil. Benim javascript benim acemi bilgi gider gitmez staffType bir özellik değil ama bir işlev gibi çağırıyorsunuz? Bu sadece meraklı bir soru değil :) – Elisabeth

İlgili konular