मैं एक विकल्प मेरी सीएस कक्षा में आपत्ति है, और मुझे इसमें कुछ टेम्पलेट्स रखना चाहते हैं:कॉफीस्क्रिप्ट में, संकलित होने के बजाए रन-टाइम पर स्ट्रिंग को इंटरपोल करने का कोई 'आधिकारिक' तरीका है?
class MyClass
options:
templates:
list: "<ul class='#{ foo }'></ul>"
listItem: "<li>#{ foo + bar }</li>"
# etc...
तो मैं इन तार बाद में कोड में को जोड़ करना चाहते हैं ... लेकिन बेशक इन्हें "<ul class='" + foo +"'></ul>"
पर संकलित किया गया है, और foo अपरिभाषित है।
क्या .replace()
का उपयोग कर रन-टाइम पर ऐसा करने के लिए कोई आधिकारिक कॉफीस्क्रिप्ट तरीका है?
संपादित करें:
# interpolate a string to replace {{ placeholder }} keys with passed object values
String::interp = (values)->
@replace /{{ (\w*) }}/g,
(ph, key)->
values[key] or ''
तो मेरे विकल्प अब की तरह लग रहे:
: बाद में कोड मेंtemplates:
list: '<ul class="{{ foo }}"></ul>'
listItem: '<li>{{ baz }}</li>'
और फिर मैं मदद करने के लिए एक छोटे उपयोगिता लेखन समाप्त हो गया
template = @options.templates.listItem.interp
baz: foo + bar
myList.append $(template)
सुझावों के लिए धन्यवाद। – Adam
अद्यतन के लिए फिर से धन्यवाद। आपका समाधान मेरी 'स्ट्रिंग :: इंटरप' चीज़ की तुलना में थोड़ा क्लीनर दिखता है। क्या आपका रास्ता भी बेहतर प्रदर्शन करेगा क्योंकि यह रेगेक्स का उपयोग नहीं करता है या यह एक गैर-मुद्दा है? मैं इसे बहुत बड़े लूप में कर रहा हूं। – Adam
किसी और के लिए जो यह उपयोगी पा सकता है, जोनाथन की विधि मेरी तुलना में काफी बेहतर प्रदर्शन करती है: http://jsperf.com/string-concat-vs-regex-replace – Adam