2012-04-20 75 views
0

我正在編寫一個Rails應用程序,並且我正在爲移動視圖使用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創建動作,這將返回,比方說,一個新的聯繫人的JSON表示。

同樣,我想阻止JQM嘗試插入新頁面 - 我只想刪除觸發事件的特定表單。但我不想禁用我在別處依賴的標準JQM行爲。

是否有乾淨,簡單的方法來做到這一點?

我收集'pagebeforeload'事件是我的朋友,但我不清楚如何設置它。

這個職位似乎相關(jquery mobile prevent page change depending on calling page)......但我更正,這是一個全球性的設置?似乎在我的情況下過度殺傷。

這是一個Rails 3.1項目,所以我可以在控制器特定的JavaScript資產文件中設置此項目,這種方式可以與標準Rails-UJS一起使用。

任何幫助將不勝感激,

熱烈,

+0

因此...回想起來,解決方案非常明顯。 DIY,給JQM一個休息 – doublea 2012-04-20 20:09:19

回答

0

是這樣的:

$('#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; 
    }); 
}); 
0

嘗試data-ajax="false"在表單標籤的屬性。這將禁用JQuery Mobile的ajax行爲,並允許您在Rails中執行ajax調用。

相關問題