2013-08-09 9 views
7

मैं टर्बोलिंक्स मणि का उपयोग कर रेल 4 एप्लिकेशन पर रूबी विकसित कर रहा हूं। मैंने देखा है कि जब कोई लिंक क्लिक किया जाता है तो लेआउट अभी भी सर्वर पक्ष प्रदान करता है लेकिन टर्बोलिंक जावास्क्रिप्ट बस इस प्रस्तुत सामग्री से शरीर को पकड़ लेता है। मेरा प्रश्न नियंत्रक पक्ष पर है यह निर्धारित करना संभव है कि टर्बोलिंक्स के माध्यम से कोई अनुरोध किया गया है या नहीं। अनिवार्य रूप से इस कार्यक्रम में टर्बोलिंक्स के माध्यम से एक अनुरोध किया जाता है, मैं लेआउट को झूठ में सेट करना चाहता हूं क्योंकि अनिवार्य कोड निष्पादित नहीं किया जाता है। मेरी ApplicationController में मैं पहले से ही निम्नलिखित कोड है: अगर मैं jQuery के माध्यम से एक AJAX अनुरोध करनारेल नियंत्रक जांचें कि क्या टर्बोलिंक्स अनुरोध

# Don't use layout when AJAX request 
layout proc { |controller| controller.request.xhr? ? false: "application" } 

इस कोड को हैडर प्रतिपादन से एक AJAX अनुरोध से बचाता है, लेकिन यह जब यह Turbolinks की बात आती है कुछ भी करने को नहीं लगता है ।

+0

एक लेआउट के बिना प्रतिपादन टर्बोलिंक प्रक्रिया को तोड़ नहीं देगा? टर्बोलिंक्स (उद्धरण): 'वर्तमान पृष्ठ उदाहरण को जीवित रखें और केवल शरीर और शीर्षक को शीर्षक में बदल दें'। तो ऐसा लगता है कि टर्बोलिंक भेजे जाने वाले पूर्ण पृष्ठ लेआउट पर निर्भर करता है। – zwippie

उत्तर

0

हालांकि यह एक हैक का थोड़ा सा है, लेकिन मैंने पाया कि "एक्स-एक्सएचआर-रेफरर" के लिए हेडर की जांच करना चाल चल रहा है।

unless request.headers["X-XHR-Referer"].present? 
    do_some_stuff 
end 

ऐसा लगता है कि टर्बोलिंक्स कुछ पुनर्निर्देशन हैंडलिंग के लिए हेडर जोड़ते हैं। हालांकि भविष्य में यह बदल सकता है।

+0

कुछ समय पहले मैंने इसे प्राप्त करने के लिए टर्बोलिंक्स के अपने स्वयं के बेस्टर्ड संस्करण को कार्यान्वित किया, लेकिन पाया कि कभी-कभी ब्राउज़र में बैक बटन का उपयोग करते समय एक पृष्ठ शरीर के बिना प्रस्तुत करेगा और चीजें भयानक लगती हैं। मैंने जल्दी से फैसला किया कि यह प्रयास के लायक नहीं था और मुझे अपनी जरूरतों के लिए पीजेएक्स या मानक AJAX का उपयोग करना चाहिए। लेकिन शेयर के लिए धन्यवाद। –

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