2011-09-14 2 views
2

사용자 (jQuery 이벤트 사용)가 이전 선택 사항을 선택 취소 할 수있는 라디오 그룹이 있습니다. KnockoutJS를 추가하여 변경 사항을 추적하려고하지만 뷰 모드는 UI와 동기화되지 않습니다. 아무도 내가 동기화 할 수있는 방법을 제안 할 수 있습니까?보기 모델을 동기화 상태로 유지하면서 라디오 버튼 선택 취소

내보기 코드 : JS 대응

<div id='test'> 
    <input data-bind="checked: asd" name='asd' type='radio' value="a"/> 
    <input data-bind="checked: asd" name='asd' type='radio' value="b"/> 
    <input data-bind="checked: asd" name='asd' type='radio' value="c"/> 
</div> 
<div> 
    <p>Linked Value: <span data-bind="text: asd"></p> 
</div> 

:

$('#test input[type="radio"]').click(function (event) { 
    var checked = $(this).hasClass('checked'); 
    if (checked) { 
     $(this).removeAttr('checked'); 
     $(this).removeClass('checked'); 
    } 
    else { 
     $(this).addClass('checked'); 
    } 
}); 

var viewModel = { 
    asd: ko.observable("a") 
}; 

ko.applyBindings(viewModel); 

예는 this fiddle 온라인 여기에서 볼 수 있습니다.

답변

1

내가하는 간단한 방법이해야 할 것이라고 생각 : 피드백에 대한

$('#test input[type="radio"]').click(function (event) { 
    if ($(this).val() === viewModel.asd()) { 
     viewModel.asd(null); 
    } 
}); 

Updated Fiddle

+0

@ RP 해당 치료는 작동합니다. 노크 미 아웃) 이안 –

+0

@RP 좋았어, 사이드 노트로, 데이터 바인딩 = "클릭 : ..."방법을 통해이 작업을 얻으려고 시도하는 것은 총 PITA이고, 나는 그렇게 할 수 없었다. –

+0

@Allen 내 생각에 랩핑 된 사용자 정의 바인딩을 수행하고 동일한 이벤트가 발생하면이를 클릭 할 때 null을 처리하는 다른 이벤트 처리기가 추가됩니다. 뭔가 : http://jsfiddle.net/rniemeyer/TMZsJ/. 관찰 할 수없는 것에 대한 바인딩을 처리하는 데 좀 더 많은 작업이 필요하고 jQuery 종속성을 쉽게 제거 할 수 있습니다. –

1

확인 된 속성에 대해 걱정할 필요가 없습니다. 여기에 이벤트를 변경합니다

$('#test input[type="radio"]').click(function (event) { 

    var checked = $(this).hasClass('checked'); 
    if (checked) { 
     $(this).removeClass('checked'); 
    } 
    else { 
     $(this).addClass('checked'); 
    } 
}); 

Fork of your fiddle here

+0

감사 - 변경이 I를 의미하지만 의도 한 기능인 radiogroup을 더 이상 선택 해제 할 수 없습니다. –

+0

@ 이안 그래서 옵션 a, b, c 중 하나를 선택할 수있게하려면? 사용자가 옵션 2x를 클릭하고 두 번 클릭하여 제거 할 수있게하여이 기능을 원하십니까? –

+0

그렇습니다. 사용자가 이전에 선택한 값을 클릭하여 선택을 모두 제거 할 수 있습니다. –

관련 문제