2012-06-10 3 views
4

양식 제출 동작과 관련하여 knockoutjs와 jquery mobile 사이에 명백한 비 호환성을 발견했습니다.jquery 모바일 및 녹아웃 양식 제출 바인딩

는 다음과 같은 마크 업을 고려하십시오

<form data-bind="submit: myKoSubmitAction"> 
    <!-- form fields here --> 
</form> 

의도는 녹아웃입니다 서버 포스트/취득을 방지하고 대신 myKoSubmitAction를 호출합니다. jqm은 또한 jqm에 대해서만 표준 제출 동작을 방지합니다. 이유는 양식 제출이 ajax 요청으로 대체되기 때문입니다.

그래서 녹아웃 (아마도)이 표준 서버 요청을 막는 데 성공하지만 jqm이 ajax 요청을 보내지 못하게합니다.

Google 그룹에서이 문제에 대한 답을 찾았으므로 이뿐 만이 아니라고 생각했습니다. 다음 사용자 정의 코가 결합

답변

4

아래 내가 찾을 수 있었던 가장 좋은 해결책입니다 참조 :

//This binding fixes apparent incompatibility between knockout and jqm 
ko.bindingHandlers.jqmsubmit = { 
    init: function (el, accessor, allbindings, vm) { 
    ko.bindingHandlers.submit.init(el, accessor, allbindings, vm); 
    $(el).submit(function (e) { 
     // prevent the submit behavior 
     e.preventDefault(); 
     e.stopPropagation(); 
     return false; 
    }); 
    } 
}; 

표준의 장소에서 사용하기 위해 제출 KO 바인딩 :

<form data-bind="jqmsubmit: myKoSubmitAction"> 
    <!-- form fields here --> 
</form> 
+0

iOS에서이 기능이 작동합니까 ?? – Daniel

+0

iOS safari에서 테스트하지 않았습니다. jqm 및/또는 녹아웃은 내가 아는 모든 브라우저에서 비정상적인 동작을 보일 수 있습니다. – LOAS

5

당신 <form> 요소에 data-ajax="false"을 추가 할 수도 있습니다.

Submitting Forms을 참조하십시오.

+0

양식을 표준 방식으로 (페이지를 새로 고침하여) 제출하지 않습니까? – Bartek

+3

아니요'data-bind = "submit : ..."는 표준 양식 제출을 무시합니다. –

+0

@MikeWhite이 제안이 나를 위해 일했기 때문에 분명히 아니오, 아니면 라이브러리를 포함하는 순서대로해야 할 수도 있습니다. – Pablo