2012-07-25 5 views
0

knockout.js를 사용하여 목록 값을 표시하고 있는데 입력 요소를 사용하지 않을 때 'foreach'내부의 입력 요소를 사용하면 표시되지 않습니다. 안드로이드의 목록 및 디스플레이 깨진 HTML 요소) 2.Android 2의 Knockout.js

내가 최종 body 태그 전에 스크립트에서보기 모델을 초기화하고 있습니다 :

$(".pageId").bind('pageinit', function(){ 
ko.applyBindings(new MyViewModel()); 
}); 

나는 또한 jQuery를 모바일 함께 일하고, 그래서으로 시도

$(".pageId").bind('pageshow',function(){ 

$("input").checkboxradio(); 

}); 

하지만 Android 2에서도 작동하지 않았습니다.

Android 2에서 knockout.js를 사용하여 체크 박스/라디오 버튼/드롭 다운을 올바르게 렌더링하는 방법이 있습니까?

답변

1

다음은 어떻게 작동했는지 보여줍니다. KO의 afterRender 속성을 사용하여 jQuery Mobile 요소를 렌더링해야합니다. 예를 들면 :

<script type="text/javascript"> 
    function jQueryify(elements, dataObj) 
    { 
     $.each(elements, function(key, obj) 
     { 
      if($(this).is('input[type="radio"]')) 
       $(obj).checkboxradio(); 
      else if($(this).is('select')) 
       $(obj).selectmenu(); 
     }); 
    } 
</script> 

다음 마크 업

<div data-bind="foreach: {data: collection, afterRender: jQueryify}> 
    <!-- Your template goes here --> 
</div> 

내가이 일을 더 나은 방법이 확신 해요,하지만 내가 그것을 어떻게입니다한다. jQuery Mobile이 공개하는 "create"이벤트를 사용할 수도 있다는 것을 알고 있습니다. 그러나 나는 그것에 대해 조사하지 않았습니다.

편집 : 당신은 "강화의 새로운 마크 업"섹션을 보면 http://jquerymobile.com/demos/1.1.1/docs/pages/page-scripting.html
당신이되도록 콘텐츠를 렌더링하는 방법에 대한 자신의 권고를 볼 수 있습니다 : 난 그냥 내가 찾고 있던 jQuery를 모바일 사이트의 문서를 발견 그것은 옳았다. 또한 'pageinit'이벤트에 대한 바인딩은 생성이 필요한 모든 항목이 이미 jquery 모바일 위젯 버전으로 변환된다는 것을 의미합니다. jquery가 도착하기 전에 내용에 바인딩하고 싶으면 나머지 내용으로 새 내용이 렌더링되도록하려면 일반 $ (document) .ready() 함수에 바인딩하면됩니다.