2011-08-13 11 views
16

मैं अपनी रेल वेबसाइट की अनुक्रमणिका पर "उपयोगकर्ता" लिंक बनाने की कोशिश कर रहा हूं ताकि यह पंजीकृत उपयोगकर्ता (User.all) दिखाए, लेकिन मैं चाहता हूं कि वेबसाइट के दाहिने भाग पर आंशिक रूप से दिखाई दे, शुरुआत से पूरे पृष्ठ को लोड किए बिना div।link_to और दूरस्थ => सत्य + jquery: कैसे? मदद?

मुझे पता था कि यह पुराने प्रोटोटाइप और रिमोट => सच के साथ संभव था लेकिन रेल 3.1 और jQuery (और संपत्ति) के साथ मुझे नहीं पता कि यह कैसे करना है।

क्या कोई मुझे ट्यूटोरियल के लिए रास्ता दिखाने या दिखाने में सक्षम हो सकता है?

उत्तर

46

यह वास्तव में काफी आसान है, यह सिर्फ एक बड़ी बात की तरह लगता है क्योंकि यह नई है । मूल रूप से, नए विनीत जावास्क्रिप्ट समर्थन के साथ, रेल ujs स्क्रिप्ट घटनाओं का एक सेट आप के लिए जावास्क्रिप्ट कार्यों बाध्य कर सकते हैं को उजागर करता है, वे हैं:

  1. ajax: beforeSend - निकाल दिया से पहले भेजने होता
  2. ajax: सफलता - निकाल दिया के बाद भेजने होती है, तो प्रतिक्रिया
  3. ajax शामिल हैं: पूर्ण - सफलता घटना
  4. ajax के बाद निकाल दिया: - गोली चलाई जब त्रुटियों मौजूद हैं

तुम सब करने की जरूरत है एक कार्यात्मक लिखना है त्रुटि n (जो आप $ document.ready में लपेटते हैं) जो बदले में इन घटनाओं में से प्रत्येक के लिए कुछ अज्ञात फ़ंक्शंस को बाध्य करता है, या केवल उन घटनाओं में से आप को रुचि रखते हैं।

उदाहरण के लिए, मान लीजिए कि आपके पास एक div है जिसे आप रखना चाहते हैं "प्रतिक्रिया_डेटा" की आईडी के साथ प्रतिक्रिया डेटा, और आपके पास "AJAX_trigger" की आईडी वाला एक लिंक है। कुछ इस तरह: सच में

$(document).ready(
    function(){ 
      $("a#ajax_trigger").bind("ajax:success", 
        function(evt, data, status, xhr){ 
         //this assumes the action returns an HTML snippet 
         $("div#response_data").html(data); 
      }).bind("ajax:error", function(evt, data, status, xhr){ 
        //do something with the error here 
        $("div#errors p").text(data); 
      }); 
}); 

, तुम सब कर रहे हैं:

<%= link_to "My Link", some_model_path(@model_instance), 
         :remote => true, :html => {:id => "ajax_trigger"} %> 
<div id="response_data"> 
</div> 

तुम सब करने की ज़रूरत है आदेश div में सर्वर से प्रतिक्रिया डाल करने के लिए नीचे दिए गए एक की तरह एक समारोह प्रदान करना है सर्वर से वापस आने पर जावास्क्रिप्ट प्रतिक्रिया को संभालने वाला है। आपको एक्सएचआर अनुरोध शुरू करने के लिए वास्तव में कुछ भी विशेष नहीं करना है, और आप इस विधि को सुरक्षित रूप से .js फ़ाइल में संग्रहीत भी कर सकते हैं जो स्थैतिक संपत्ति के रूप में कार्य करता है। यदि आप रेल 3.1 का उपयोग कर रहे हैं, तो आपको इसे उचित नामित जावास्क्रिप्ट फ़ाइल में रखना चाहिए जो नियंत्रक से मेल खाता है। आपके नियंत्रक में आपको यह सुनिश्चित करने की आवश्यकता है कि आप निर्दिष्ट करें: layout => responds_with() विधि में गलत है, इस तरह नियंत्रक केवल एक पूर्ण पृष्ठ की बजाय आंशिक या टेम्पलेट प्रस्तुत करता है। यह सेटअप उन कार्रवाइयों के साथ भी काम करता है जो अनुरोध पर निर्दिष्ट डेटा-प्रकार के आधार पर क्लाइंट के साथ-साथ जेएसओएन द्वारा जावास्क्रिप्ट को निष्पादित करने के लिए वापस लौटाते हैं। http://www.alfajango.com/blog/rails-3-remote-links-and-forms/

+0

ईमानदारी से, "रेल मार्ग" इतना जटिल है, कि मैं सिर्फ शुद्ध jQuery =) –

+0

के लिए जाना बहुत अच्छी तरह से समझाया। और यह एक जीवन बचतकर्ता है। –

संबंधित मुद्दे