2012-01-23 9 views
7

मेरी रेल में 3.1.3 अनुप्रयोग, मैं अपने जावास्क्रिप्ट फ़ाइल में कुछ ERB कोड डालने के लिए चाहते हैं, लेकिन यह किसी कारण से पार्स नहीं किया जा रहा है:संपत्ति पाइप लाइन के लिए जावास्क्रिप्ट में ERB कोड एम्बेड

# app/assets/javascripts/application.js 
//= require_tree ./shared 

# app/assets/javascripts/shared/shared.js.erb 
MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

गाया जाता है /application.js में इस तरह:

MM.loading = '<img src=" asset_path("icons/ajax-loader.gif") >">'; 

मैं रेल गाइड में किसी भी अतिरिक्त कदम नहीं देख सकते हैं - वहाँ कुछ मैं याद कर रहा हूँ है? बीटीडब्ल्यू मैं दृश्य फ़ाइलों के लिए हैमल का उपयोग कर रहा हूं, और .js.haml के साथ उपरोक्त कोशिश की, #{...} में संलग्न है।

उत्तर

10

आपके पास अपने कोड में एक वाक्यविन्यास त्रुटि है। यह:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") >">'; 

इस होना चाहिए:

MM.loading = '<img src="<%= asset_path("icons/ajax-loader.gif") %>">'; 

आप कोड की सहायक ब्लॉक करने की अंतिम ERB टैग लापता हैं।

+0

आह, अच्छी तरह से देखा ... यह सब कुछ था! – Zubin

+0

ओह ठीक है, मुझे दो शॉट्स ले गए। –

-2

अपने application.js में एक .erb एक्सटेंशन जोड़ें और इसे काम करना चाहिए।

आवश्यक फ़ाइलों की सामग्री पहले शामिल हो जाती है, फिर मैनिफेस्ट पर एक्सटेंशन के अनुसार संसाधित की जाती है।

+0

अच्छा विचार है, लेकिन मेरे लिए काम नहीं किया। फ़ाइल नाम प्रकट करने के लिए '.erb' को जोड़ने के बाद 'shared.js.erb' में' console.js.erb' में 'console.log =" 1 + 1 = <% = डालता है "। – Zubin

+0

यह आवश्यक नहीं था। ब्रैकेट को ठीक करने के बाद यह मैनिफेस्ट फ़ाइल नाम पर .erb को जोड़ने के बिना काम करता था। – Zubin

0

रेल 4 में, बजाय एक js.erb दृश्य का उपयोग कर के, मैं या सुझाव है कि आप संपत्ति पाइपलाइन जब भी संभव हो पर बने रहें और पारित gon का उपयोग कर जे एस के लिए चर कुछ अन्य तकनीक पर चर्चा की: gon साथ Ruby on Rails - Send JavaScript variable from controller to external Javascript asset file

:

एप्लिकेशन/विचारों/लेआउट/application.html.erb:

<head> 
    <meta charset="utf-8"/> 
    <%= include_gon %> 

एप्लिकेशन/नियंत्रक/application_controller.rb:

0,123,
before_filter { gon.path = asset_path('icons/ajax-loader.gif') } 

एप्लिकेशन/आस्तियों/javascripts/shared.js.coffee:

MM.loading = '<img src="' + gon.path + '">'; 

इस विधि तेजी क्योंकि फ़ाइल स्टार्टअप पर केवल एक बार precompiled है, पर रेल के माध्यम से सर्वर के बजाय परोसा जाता है, और जेएस के बाकी के रूप में एक ही HTTP अनुरोध।

जावास्क्रिप्ट के लिए एक संपत्ति यूआरएल पास करने का विशेष उपयोग के मामले में कहा गया है: URL of images in JavaScript code using Rails 3.1 asset pipeline?

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