HAML

2010-04-14 19 views
53

के भीतर जावास्क्रिप्ट के भीतर रूबी विधियां मेरे पास एक jQuery स्क्रिप्ट है जो किसी फ़ॉर्म में एक नया फ़ील्ड जोड़ती है, और इस फ़ील्ड में सरणी से गतिशील जानकारी होती है। समस्या यह है कि मैं एचएएमएल इंडेंटेशन को तोड़ने और त्रुटियों के कारण जावास्क्रिप्ट के भीतर चुनिंदा क्षेत्र के विकल्पों को पॉप्युलेट करने के लिए array.each को जोड़ने का तरीका नहीं समझ सकता।HAML

%script(type="text/javascript") 
    $('#mylink').click(function() { 
    $('#mylink').after('<select> 
    - myarray.each do |options| 
    <option value="#{options.id}">#{options.name}</option> 
    </select>); 
)}; 

इसके अलावा के साथ इसे करने की कोशिश: कोई भाग्य के साथ जावास्क्रिप्ट फिल्टर

यहाँ मेरी सबसे अच्छा प्रयास है कि काम नहीं करता है।

+0

धन्यवाद, ऐसा लगता है कि किसी ने मेरे लिए मार्कडाउन इंडेंटेशन समस्या तय की है। – Josh

उत्तर

96

आमतौर पर, अगर कुछ हैमल में दर्द होता है, तो इसका मतलब है कि आपको एक सहायक या आंशिक के लिए मुश्किल बिट को दोबारा करना चाहिए और उसे कॉल करना चाहिए।

// some_helper.rb 
def new_snazzy_select_tag(options = []) 
    select_tag 'tag_name_here', options.map { |option| [option.id, option.name] } 
end 

इसके अलावा, आप के बाद से यह आप के लिए एक स्क्रिप्ट टैग में डाल दिया और खरोज की अनुमति देगा जावास्क्रिप्ट प्रस्तुत करना :javascript फिल्टर का उपयोग करना चाहिए।

अंत में, आप haml में कहीं भी #{ruby_expression} उपयोग कर सकते हैं, :javascript फिल्टर, जो बहुत आसान है जब आप उत्पादन के लिए स्थानों है कि सीधे HTML तत्वों की सामग्री को नहीं कर रहे हैं करने के लिए गहरे लाल रंग का भाव का परिणाम की जरूरत भी शामिल है।

// some_view.html.haml 
:javascript 
    $('#mylink').click(function() { 
    $('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}"); 
    }; 
+0

मैं वेब ऐप विकास के लिए काफी नया हूं, मैंने कभी एक सहायक का उपयोग करने के बारे में सोचा नहीं। मैं अपने कोड को एमवीसी के बहुत करीब रख रहा हूं, लेकिन हमेशा सोच रहा था कि मुझे लूपों के आसपास कैसे जाना है। यह अच्छी तरह से काम करना चाहिए। जवाब के लिए धन्यवाद। – Josh

+4

हेल्पर्स आम तौर पर दृश्य और नियंत्रक के बीच भाग होते हैं। उन्हें कभी भी किसी भी सर्वर साइड स्टेटस को कभी नहीं बदलना चाहिए, और केवल बुरा दृश्य तर्क के साथ * मदद * के लिए वहां हैं। आपके विचारों में रूबी जितना संभव हो सके उतना न्यूनतम और स्पष्ट होना चाहिए। हेल्पर्स उसमें मदद करते हैं। –

+6

टीएल; डीआर ...? # {ruby_expression} धन्यवाद एलेक्स का प्रयोग करें। – umassthrower

8

इस प्रयास करें, यह काम करना चाहिए (सभी मैं था पांचवीं पंक्ति में एक भी स्थान निकाल कर छठे पर बंद करने वाला उद्धरण जोड़ने था):

%script(type="text/javascript") 
    $('#mylink').click(function() { 
    $('#mylink').after('<select> 
    - @myarray.each do |options| 
    <option value="#{options.id}">#{options.name}</option> 
    </select>'); 
)}; 

हालांकि, अगर आप यह सोचते हैं चला रहे हैं यह एक रूबी स्क्रिप्ट या प्रकार के ढांचे के साथ, टेम्पलेट के बाहर क्यों न करें? यह शायद सबसे उपयुक्त होगा। रेल/सिनात्रा और अन्य ढांचे में, आप ऐसा करने के लिए एक सहायक विधि का उपयोग कर सकते हैं। यदि आप हैमल संदर्भ को देखते हैं, तो वे वास्तव में रूबी का मूल्यांकन करने के लिए - का उपयोग हतोत्साहित करते हैं।

+0

मैंने सिंटैक्स हाइलाइटर के बिना मेमोरी से कोड में टाइप किया, ऐसा लगता है कि मुझे कुछ त्रुटियां थीं। मैं फिलहाल परीक्षण नहीं कर सकता, लेकिन मेरा मानना ​​है कि यह अभी भी असफल रहेगा। मैं सहायक मार्ग पर जा रहा हूं, जिसे मैंने पहले नहीं सोचा था। धन्यवाद। – Josh

+0

मैंने पहले एक त्वरित sinatra ऐप में अपने उत्तर में दिए गए कोड का परीक्षण किया था, और यह ठीक काम करने लग रहा था (कोई हैमल त्रुटियां नहीं)। आप सुनिश्चित हैं कि त्रुटि कहीं और नहीं है? यादृच्छिक विकल्प आईडी और नामों के साथ मुझे जेनरेट किया गया आउटपुट यहां दिया गया है: http://pastie.org/920686 – ehsanul