12
私は選択肢を持っているが、私のCSクラス内のオブジェクト、と私はそれにいくつかのテンプレートを維持したいと思います:CoffeeScriptでは、コンパイル時ではなく実行時に文字列を補間する「公式の」方法がありますか?
class MyClass
options:
templates:
list: "<ul class='#{ foo }'></ul>"
listItem: "<li>#{ foo + bar }</li>"
# etc...
その後、私は後でコードでこれらの文字列を補間したいのですが...しかし、もちろんこれらは"<ul class='" + foo +"'></ul>"
にコンパイルされ、fooは未定義です。
.replace()
を使用して、実行時にこれを行うには、公式のCoffeeScript方法はありますか?
編集:私は助けるために小さなユーティリティを書いてしまった:以降のコードで、その後
templates:
list: '<ul class="{{ foo }}"></ul>'
listItem: '<li>{{ baz }}</li>'
そして:
# interpolate a string to replace {{ placeholder }} keys with passed object values
String::interp = (values)->
@replace /{{ (\w*) }}/g,
(ph, key)->
values[key] or ''
だから私のオプションは今のように見える
template = @options.templates.listItem.interp
baz: foo + bar
myList.append $(template)
感謝。 – Adam
アップデートをお寄せいただきありがとうございます。あなたのソリューションは私の 'String :: interp'より少しきれいに見えます。正規表現を使用していないか、それとも非問題なので、あなたのやり方も良くなりますか?私は非常に大きなループでこれをやっているかもしれません。 – Adam
これが役に立つかもしれない他の人にとって、Jonathanの方法は私よりもはるかに優れています:http://jsperf.com/string-concat-vs-regex-replace – Adam