2011-01-05 21 views
6

हाल ही में मैंने कुछ अनुप्रयोगों में भाग लिया है जो js.erb का उपयोग कर रहे हैं और मुझे सच में यकीन नहीं है कि इसका उपयोग कैसे करें ... यहां नीचे दिया गया कोड है। क्या कोई मुझे समझने में मदद कर सकता है कि यह कैसे काम करता है?js.erb कैसे काम करता है

routes.rb फ़ाइल

map.resources :player_emails 

बनाने कार्रवाई में मेरी नियंत्रक player_emails_controller.rb में

def create 
@player_email = PlayerEmail.create(params[:player_email]) 
if @player_email.save 
    @response_txt = "The player has been emailed." 
    PlayerEmailsMailer.deliver_pattern_email(@something, @player_email, request.host_with_port) 
    @error = false 
else 
    @error = true 
    @response_txt = "Please make sure you entered your name and a valid email address." 
end 
end 

तो मैं फ़ाइल है player_emails/create.js.erb

$('#player_email_ind').hide(); 
$('#player_email_submit').show(); 
$('#player_response_msg').html("<%= escape_javascript @response_txt %>").fadeIn(); 
<% unless @error %> 
$('#player_email_form')[0].reset(); 
<% end %> 

मुझे पता है क्या jQuery जा रहा है लेकिन मुझे नहीं पता कि यहकैसे कर रहा हैकॉल करें। जब वहाँ एक js.erb यह सिर्फ स्वचालित रूप से एक ajax कॉल करता है ... किसी तरह से इस काम करता है और यही कारण है कि मुझे नहीं नियंत्रक कार्रवाई में एक respond_to जरूरत है यह इस कह व्याख्या कर सकते हैं format.js

+1

अगर मैं लिखने के लिए एक ट्यूटोरियल है तो .js.erb वहाँ सिर्फ उत्सुक हूं ... –

उत्तर

3

अपने प्रपत्र सबमिट करता है बटन एक है :remote => true उस पर? यदि ऐसा है, तो rails.js या application.js में कुछ जावास्क्रिप्ट हो सकता है जो स्वचालित रूप से AJAX के माध्यम से सबमिट हो जाता है। नीचे की रेखा है, वहां कुछ जावास्क्रिप्ट होना चाहिए जो AJAX कॉल कर रहा है और जेएस या जेएसओएन प्रतिक्रिया मांग रहा है, अन्यथा यह एक HTML अनुरोध होगा।

क्यों आपको respond_to ब्लॉक की आवश्यकता नहीं है, मुझे पूरी तरह से यकीन नहीं है। शायद चूंकि कॉल हमेशा AJAX द्वारा किया जा रहा है और एक js.erb टेम्पलेट उपलब्ध है, यह शिकायत किए बिना बस इसकी बात करता है। क्या कोई html.erb टेम्पलेट है? यदि नहीं, तो नियमित रूप से सबमिट करने का प्रयास करें और देखें कि क्या यह शिकायत करता है।

6

यदि कोई जेएस (AJAX) अनुरोध किया गया है तो यह js.erb फ़ाइल और उपाध्यक्ष को प्रस्तुत करके जवाब देगा।

respond_to do |format| 
    format.js{ 
     render :template => 'create.js.erb' 
    } 
    format.html{ 
     render :template => 'create.html.erb' 
    } 
    end 
5

जब फ़ॉर्म सबमिट किया जाता है, यह /player_emails करने के लिए एक पोस्ट करता है:

इस डिफ़ॉल्ट व्यवहार किया जाता है कि प्रदर्शन किया जा रहा है। routes.rb में संसाधन घोषणा सुनिश्चित करता है कि अनुरोध PlayerEmailsController#create द्वारा प्रबंधित किया गया है।

नियंत्रक प्रत्येक प्रारूप को प्राप्त करने के लिए जिम्मेदार है। AJAX कॉल के मामले में, प्रारूप 'जेएस' है, और अनुरोध शीर्षलेख से प्रारूप को कम करके URL (/player_emails.js) या (अधिक संभावना) के अंत में प्रारूप स्ट्रिंग को स्पष्ट रूप से जोड़कर सेट किया गया है।

आपके मामले में, create कार्रवाई AJAX के अलावा अन्य किसी भी चीज़ की अपेक्षा नहीं करती है, इसलिए यह शॉर्टकट लेता है और respond_to और format ब्लॉक को छोड़ देता है। नियंत्रक पहले से ही यह पता लगा चुका है कि प्रारूप 'जेएस' है, इसलिए जब create पूरा हो गया है तो प्रारूप (create.js.erb) के लिए उचित टेम्पलेट को प्रस्तुत करने की डिफ़ॉल्ट कार्रवाई होती है।

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