2013-08-05 7 views
5

मैं रेल 3 पर अच्छी तरह से काम कर रहे कुछ कोड का उपयोग करता हूं लेकिन रेल 4 पर नहीं, मुझे लगता है कि यह टर्बोलिंक्स के कारण होता है लेकिन मुझे इसके बारे में ज्यादा जानकारी नहीं है, और अधिक गहरी खुदाई नहीं कर सकतीरेल 4 टर्बोलिंक्स फॉर्म कई बार सबमिट करते हैं

दृश्य:

a/v/m/_new_comment.slim                                
.new-comment                                   
- if current_user 
    = render "editor_toolbar" 
    = form_for(Comment.new, :remote => true, :url => mission_comments_path(@mission)) do |f| 
    = f.text_area :content, :class => "span10", 
    :rows => "4", :tabindex => "1" 
    #preview.hidden 
    = "Loading..." 
    = f.submit t("missions.submit_comment"), 
    "data-disable-with" => t("missions.submitting"), 
    :class => "btn btn-primary", :tabindex => "2" 
- else 
    = render "need_login_to_comment" 

नियंत्रक:

def create 
    @mission = Mission.find(params[:mission_id]) 
    @comment = @mission.comments.build(comment_params) 
    @comment.user = current_user 

    if @comment.save 
    @mission.events.create(user: current_user, action: "comment") 
    render layout: false 
end 

और js:

मेरी समस्या का समाधान, यहाँ कोड है
<% if @comment.errors.any? %>                               
    $(".new-comment textarea").focus(); 
<% else %> 
    $(".comments").append("<%= j (render @comment, :index => @mission.comments.count-1) %>"); 
    $(".new-comment #preview").addClass("hidden").html(''); 
    $(".new-comment textarea").css("display", "block").val(''); 
    $(".editor-toolbar .preview").removeClass("active"); 
    $(".editor-toolbar .edit").addClass("active"); 
<% end %> 

मेरे पास इस कोड के बारे में दो प्रश्न हैं, पहले: इस तरह का नियंत्रक कोड काम नहीं करता है जेएस कोड क्लाइंट को हस्तांतरित करता है लेकिन नहीं चलता है, मुझे उस क्रिया के नीचे render layout: false जोड़ना होगा, इसकी आवश्यकता नहीं है रेल 3

दूसरा प्रश्न: जब मैं पहली बार इस पृष्ठ पर जाता हूं, पृष्ठ को फिर से लोड करता हूं, टिप्पणी फ़ंक्शन काम करता है, लेकिन यदि मैं इस पृष्ठ पर जाने के लिए अन्य पृष्ठों से एक लिंक पर क्लिक करता हूं, तो मैं यह फॉर्म जमा करता हूं AJAX अनुरोध कॉल एकाधिक कई बार, कई टिप्पणियां बनाई जाएंगी

अग्रिम में धन्यवाद

+0

मैं अपने विशिष्ट कोड पर टिप्पणी नहीं कर सकता, लेकिन आप टर्बो निकालने का प्रयास कर सकते हैं -लिंक्स और देखकर अगर यह बिना काम करता है। [टर्बोलिंक्स को हटाने के निर्देश] (http://blog.steveklabnik.com/posts/2013-06-25-removing-turbolinks-from-rails-4) –

+0

एप्लिकेशन.जेएस फ़ाइल से टर्बोलिंक को हटा दें, यह केवल –

उत्तर

17

इस हल में js फ़ाइल को शामिल करके इस का समाधान कर सकता

+4

सलाह के लिए धन्यवाद! मुझे बहुत मदद करता है, यह पता नहीं लगा सकता कि एक घंटे के लिए क्या समस्या है! वास्तव में दस्तावेज़ीकरण में कहीं होना चाहिए, –

1

एक संभावित कारण यह है कि आप मुद्दों में भाग ले सकते हैं यदि आप प्रत्येक पृष्ठ पर जेएस शामिल कर रहे हैं। यह मेरी समझ है कि यह जेएस को सिर में जोड़ देगा और यदि आपने इसे कई पृष्ठों पर शामिल किया है तो आप खुद को AJAX को कई बार बाध्य कर सकते हैं। ऐसा कहा जा रहा है कि यह स्पष्ट नहीं है कि आपने जो देखा उससे जेएस भी शामिल है। आप संभवतः केवल, धन्यवाद सब तुम्हारी मदद की सिर करने के लिए शरीर से = javascript_include_tag "application", "data-turbolinks-track" => true ले जाकर अपने application.js

+0

मैं काम करता हूं आवेदन में जेएस फ़ाइल शामिल करें, इसलिए मुझे लगता है कि यह कारण नहीं हो सकता है, वैसे, दृश्य कोड को आंशिक के रूप में शामिल किया गया है, क्या यह कारण हो सकता है? –

8

आप शरीर में छोड़ सकते हैं, तो आप सिर्फ करने की जरूरत है अपनी स्क्रिप्ट टैग को जोड़ने के: सामान्य में

"data-turbolinks-eval" => false 

, turbolinks के साथ, यह सुनिश्चित करें कि आपके कोड "idempotent" है बनाने के लिए सबसे अच्छा है, इसलिए यदि यह एक बार से अधिक रन, बाइंडिंग सेटअप एक बार से अधिक नहीं मिलेगा।

यह करने के लिए सबसे अच्छा तरीका है $ ('blah') के बजाय है बाँध(), पहले निकल फोन:।

$('blah').unbind('click').bind('click', function() { 
+0

धन्यवाद से पहले स्क्रिप्ट को स्थानांतरित करने की सामान्य सिफारिश है, धन्यवाद, प्रत्येक बाध्यकारी के लिए अनबाइंड –

+0

हाँ है। इसके बजाए इसे हल करने और हल करने के लिए कुछ जटिल प्लगइन्स हैं, लेकिन मुझे अनबिंड() बहुत सरल और अधिक प्रभावी पाया गया है, हालांकि यह कुछ बदसूरत जोड़ता है! – Kevin

+1

फिर से बाध्यकारी और बाध्यकारी करने की बजाय, यह '$ (दस्तावेज़) .on ('क्लिक', '.blah', फ़ंक्शन (ई) {}) करना बेहतर होगा;'। –

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