2013-07-30 5 views
1

나는 prettycheckable과 knockout을 함께 작동 시키려고 노력하고 있습니다. 최근에 다루어졌지만 최근에는 솔직히 말해서 체크 박스 (또는 라디오) 속성 버튼)이 첫 번째로드시 설정됩니다.prettycheckable과 함께 첫 번째로드에서 넉 아웃 바인딩

그래서 간단한 사용자 지정 바인딩을 작성하려고했지만 실패했습니다. isChecked가 true로 설정된 경우 또는 처음로드 할 때 false로 설정되면 첫 번째 변경 사항을 놓친 다음 실제 값을 "파악"하지만 분명히 실제 값에서 벗어납니다.

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 전체가 있습니다 here

답변

0

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

바이올린은 지금 그것을 작동, 당신의 바이올린을 수정했습니다.

See fiddle