2011-09-07 15 views
7

मैं रूबी 3.1 पर रूबी का उपयोग कर रहा हूं और मुझे आश्चर्य है कि मैं जावास्क्रिप्ट संपत्ति में आंशिक कैसे प्रस्तुत कर सकता हूं।संपत्तियों में आंशिक रेंडरिंग

क्या मैं में लक्ष्य कर रहा हूँ: अगर मैं <%= 2+3 %> बजाय लिखने यह ठीक काम करता है, btw

undefined method `render' for #<#<Class:0x007fc54584c6e8>:0x007fc5474cd470> 

:

# in /app/assets/javascript/cart.js.coffee.erb 
$('a.add_sth').click -> $('.random_container').append('<%= render partial: 'way/to/partial' %>') 

यह एक NoMethodError कारण बनता है।

मुझे लगता है कि समस्या यह है कि संपत्ति पाइपलाइन डिफ़ॉल्ट एक्शन व्यू से स्वतंत्र है और इसलिए render() अज्ञात है। वैसे भी, क्या आंशिक सामग्री को प्रस्तुत करने का कोई तरीका है?

उत्तर

8

बुरी खबर, प्रस्तुत करना उपलब्ध देखो नहीं है: same question on GitHub

+0

था के लिए धन्यवाद टी लिंक – csch

5

याद रखें कि संपत्ति स्थिर डेटा के लिए हैं, सीएसएस, जेएस या छवियों कि गतिशील रूप से इसकी सामग्री में परिवर्तन नहीं होगा की तरह है, ताकि वे बेहतर कैश्ड किया जा सकता है और/या एक सीडीएन को निर्यात किया।

चूंकि आपको रूबी कोड के साथ ईआरबी चलाने की अनुमति है, इसलिए इसे हमेशा वही मान वापस करना चाहिए (क्योंकि यह केवल संपत्ति को संकलित करते समय निष्पादित किया जाएगा)।

यही कारण है कि मुझे लगता है कि प्रस्तुत करना संपत्तियों के भीतर उपलब्ध नहीं है (हालांकि इसे स्थिर डेटा प्रस्तुत करने के लिए उचित रूप से उपयोग किया जा सकता है)।

आसान समाधान यहां: अपनी जेएस फ़ाइल को पर ले जाएं, वहां आप किसी भी दृश्य सहायक का उपयोग करने में सक्षम होंगे।

0

वास्तव में, यह मेरे लिए काम करता है। आप क्या करने की जरूरत:

= render 'way/to/partial' 

जहां 'जिस तरह से// के लिए आंशिक' मौजूदा परिसंपत्तियों फ़ोल्डर के अंतर्गत रिश्तेदार पथ है। वायर्ड चीज यह है कि पथ में, आपको संपत्ति के तहत पहले स्तर के फ़ोल्डर को छोड़ना होगा।

+0

क्या? यह कैसे हो सकता है कि इसे उपलब्ध कराने के लिए एक विधि को एक अलग पैरामीटर दे ?? क्या आपके पास कहीं एक कामकाजी उदाहरण है? – ZedTuX

0

यह मेरे लिए काम किया। (Haml के लिए)

= Haml::Engine.new(File.read(File.join(Rails.root, 'app/views/xxxxx','_form.html.haml'))).render(Object.new, :hello => "Hello World") 

और, फ़ाइल की शुरुआत में निर्भरता को जोड़ने के लिए की जरूरत की तरह अद्यतन करने की: इस मामले में, निर्भर फ़ाइल संपत्ति में होने की जरूरत है।

//= depend_on xxxxx/_form.html.haml 
1

मैं वही समस्या थी, इसलिए मैं इस render विधि ने लिखा है, कि ERB रेंडर करने के लिए आंशिक टेम्पलेट संपत्ति के अंदर इस्तेमाल किया जा सकता:

# in lib/my_app/erb_helpers.rb 
module MyApp 
    module ERBHelpers 
    class << self 

     def render(partial_path, binding) 
     dir_name, _, partial_name = partial_path.rpartition(File::SEPARATOR) 
     file_name = "_#{partial_name}.html.erb" 
     Erubis::Eruby.new(File.read(File.join(Rails.root, 'app', 'views', dir_name, file_name)).gsub("'", %q(\\\'))).result(binding) 
     end 

    end 
    end 
end 

तो मैं इस तरह coffeescript फाइल के अंदर यह प्रयोग किया है:

# in app/assets/javascripts/notifications.coffee 
MyApp.notifications.templates = 
    notice: '<%= ::MyApp::ERBHelpers.render 'application/notifications/notice', content: "%content%" %>' 
    alert: '<%= ::MyApp::ERBHelpers.render 'application/notifications/alert', content: "%content%" %>' 

MyApp.notifications.create_elem = (type, content) -> MyApp.notifications.templates[type].replace('%content%', content) 

पुनश्च: मैं 5.0 एप्लिकेशन ऑन रेल्स यह परीक्षण किया

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