2013-07-30 33 views
1

我正在努力使漂亮和淘汰賽工作在一起,我已經看到最近已經解決了,但說實話,我不能讓它工作時,複選框(或收音機按鈕)在第一次加載時設置。用漂亮的方式對第一個加載進行敲除綁定

所以我只是想寫一個簡單的自定義綁定,但它是失敗的。如果isChecked在第一次加載時設置爲true或false,它會錯過第一次更改,然後它「抓住」它,但顯然是一個實際值。

ko.bindingHandlers.prettyChecked = { 
    update: function (element, valueAccessor) { 
        ko.bindingHandlers.checked.init(element, valueAccessor); 
     $(element).prettyCheckable(); 

     var value = ko.utils.unwrapObservable(valueAccessor()); 
     if (value) { 
      $(element).next("a").addClass('checked'); 
     } else { 
      $(element).next("a").removeClass('checked'); 
     } 
    } 
}; 

$(function() { 
    $('input:checkbox').prettyCheckable(); 

    var vm = { 
     isChecked: ko.observable(false) 
    }; 

    ko.applyBindings(vm); 
}); 

小提琴here

回答

0

我修改你的小提琴,現在它的工作原理:

ko.bindingHandlers.prettyChecked = { 
    init: function (element, valueAccessor) { 

     ko.bindingHandlers.checked.init(element, valueAccessor); 
     var value = ko.utils.unwrapObservable(valueAccessor()); 

     $(element).prettyCheckable(); 
     if(value) 
      $(element).next('a').click();     
    }, 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     $(element).next("input").val(value); 
    } 
}; 

也有充分css solution

See fiddle