레일즈 애플리케이션을 작성 중이며 모바일 뷰에 jQueryMobile을 사용하고 있습니다.경우에 따라 jQueryMobile 페이지 변경을 어떻게 비활성화 할 수 있습니까?
대개의 경우 JQM은 평소와 같이 '페이지'를 추가 및 제거하여 DOM을 조작 할 수있게하려고합니다. 그러나 어떤 경우에는 기본 동작을 재정의하고 내 자신의 간단한 DOM 조작을 수행하고 싶습니다.
예를 들어 사용자 목록이 있으며 각 사용자에게는 '연락처에 추가'링크/양식이 있습니다.
<ul data-role='listview'>
<li>
<span class='name' id="user_56757234">Jim</span>
<form action="/contacts" class="new_contact_form" data-remote="true" data-type="json" id="new_contact_form_56757234" method="post">
<!-- form info here -->
<input name="commit" type="submit" value="Add Contact" />
</form>
</li>
<li>
<span class='name' id="user_975827294">Fred</span>
<form action="/contacts" class="new_contact_form" data-remote="true" data-type="json" id="new_contact_form_975827294" method="post">
<!-- form info here -->
<input name="commit" type="submit" value="Add Contact" />
</form>
</li>
<!-- etc... -->
</ul>
사용자가 주어진 연락처를 추가하기 위해 클릭 한 후 요청이 성공했다고 가정하면 지정된 양식이 사라져서 연락처가 추가되었음을 나타냅니다.
표준 Rails RESTFUL 스타일 컨트롤러를 준수해야하므로 이러한 양식은 ContactsController create action에 제출되므로 새로운 연락처의 JSON 표현을 반환합니다.
다시 말해서 JQM이 새 페이지를 삽입하지 못하도록 차단하고 싶습니다. 이벤트를 트리거 한 특정 양식을 삭제하려고합니다. 그러나 나는 다른 곳에서 의존하는 표준 JQM 행동을 무력화하고 싶지 않다.
이렇게 간단하고 명확한 방법이 있습니까?
나는 'pagebeforeload'이벤트가 내 친구 인 것을 수집하지만 이것을 설정하는 방법이 확실하지 않습니다.
이 게시물은 관련성이있는 것으로 보입니다. (jquery mobile prevent page change depending on calling page) 그러나 이것이 글로벌 설정이라는 것을 수정합니까? 내 경우에 잔인한 것처럼 보입니다.
그것은 Rails 3.1 프로젝트이므로 표준 Rails-UJS에서 사용하기에 이상적인 컨트롤러 고유의 javascript 에셋 파일에서 설정할 수 있습니다.
$('#new_contacts').live('pageinit', function(event) {
$('.new_contact_form_mobile').submit(function(e) {
var form = $(this);
var formData = $(this).serialize();
var request = $.ajax("/contacts", {
type: "POST",
data: formData,
dataType: "json"
});
request.done(function(msg) {
form.fadeOut();
});
return false;
});
});
그래서 ... 되돌아 보면, 해결책은 꽤 분명했습니다. DIY, JQM에게 휴식을주십시오. – doublea