2011-10-14 4 views
14

확인란이 여러 개 있고 선택한 상자를 수집하려고합니다. 체크 박스는 DIV의에 있고 사업부가 클릭 할 때 체크 박스도 확인을하셔야합니다 :Jquery로 값을 변경할 때 KnockoutJS 속성이 업데이트되지 않습니다.

var oCheckBox = $($(this).find('.chkSocialMediaItem').get(0)); 
oCheckBox.attr('checked', !$(oCheckBox).attr('checked')); 

선택한 내 카운터를 업데이트하지 않습니다 그래서 이것은 잘 작동하지만 KnockoutJS은 변화를 선택하지 않고 항목.

변경 이벤트를 트리거해야하는 곳을 읽었습니다. 그러나 체크 박스에서 변경 이벤트를 수신하면 실제로 트리거됩니다.

도움이 되셨다면 감사합니다.

업데이트 : 나는 '녹아웃'솔루션을 발견했다

. 내 사업부에서 본인은 '클릭'오프 데이터 바인딩을했고, 그 기능에 체크 값을 변경 :

<script type="text/html" id="Template"> 
    <div class="item" data-bind="click: DivClicked"> 
     <input type="checkbox" data-bind="checked: IsASelectedItem" class="chkSocialMediaItem"/> 
    </div> 
</script> 


function SocialMediaSearchItem() {   
      this.IsASelectedItem = ko.observable(); 
      this.DivClicked = function() { 
       this.IsASelectedItem(!this.IsASelectedItem()); 
      }; 
} 

이 유일한 해결책인가? 정말 2 Jquery 솔루션을 참조하십시오.

답변

11

checked 바인딩은 click 이벤트 만 수신합니다. 클릭 이벤트를 수동으로 트리거하면 실제 확인 된 값이 설정된 시점을 기준으로 상자가 동기화되지 않게됩니다.

위의 두 번째 예제에서 수행 한 것처럼 값을 설정하는 가장 좋은 방법은보기 모델 값을 업데이트하는 것입니다.

그러나 1.3beta을 사용하는 경우 ko.dataFor API를 사용하여 해당 데이터와 요소를 쉽게 연결할 수 있습니다. 그것은 같이 보일 것입니다 :

var oCheckBox = $('.chkSocialMediaItem'), 
     data = ko.dataFor(oCheckBox[0]); 
     data.selectedItem(!data.selectedItem()); 
+0

빠른 응답을 보내 주셔서 감사합니다. 베타 월요일을 확인해 보겠습니다. @ work :) –

+0

오, 그게 편리합니다, 어떤 아이디어가 어떻게'property' 컨트롤이 viewModel에 바인드되어 있는지 알아내는 방법이 있습니까? –

+0

자신이'data-bind' 속성을 직접 파싱 한 다음 데이터에 속성 이름을 사용하는 것 ('data [ 'somePropertyName']') –

12
내가 @RP Niemeyer에 의해 게시 한 달랐다 나를 위해 일한 해결책을 발견했다하지만 난 ... 같은 문제로 실행, 그래서 나는 그것을 게시 할 생각

.

녹아웃 버전 : 1.2.1 - (녹아웃-1.2.1.js) 녹아웃에 구속 확인란을 확인하기 위해

$('YourCheckBoxHere').removeAttr('checked'); 
$('YourCheckBoxHere').triggerHandler('click'); 

다음 내가 사용 녹아웃에 구속의 체크 박스를 체크 해제하려면

나는 다음을 사용했다

$('YourCheckBoxHere').attr('checked', 'true'); 
$('YourCheckBoxHere').triggerHandler('click'); 

다른 해결책이 제대로 작동하지 않았 으면 좋겠다. 아마 ... =이 문제에 대해 약 3 시간을 낭비했다.

관련 문제