Jos*_*osh 57 javascript ruby jquery haml
我有一个jQuery脚本,它向表单添加一个新字段,该字段包含一个数组的动态信息.问题是我无法弄清楚如何添加一个array.each来填充javascript中select字段的选项而不会破坏HAML缩进并导致错误.
这是我最好的尝试,不起作用:
%script(type="text/javascript")
$('#mylink').click(function() {
$('#mylink').after('<select>
- myarray.each do |options|
<option value="#{options.id}">#{options.name}</option>
</select>);
)};
Run Code Online (Sandbox Code Playgroud)
还尝试使用:javascript过滤器,没有运气.
Ale*_*yne 103
通常情况下,如果某些东西是haml的痛苦,那就意味着你应该将棘手的位重构为助手或部分并调用它.
// some_helper.rb
def new_snazzy_select_tag(options = [])
select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end
Run Code Online (Sandbox Code Playgroud)
此外,您应该使用:javascript
过滤器来呈现javascript,因为它会将它放在脚本标记中并允许缩进.
最后,你可以#{ruby_expression}
在haml的任何地方使用,包括:javascript
过滤器,当你需要将ruby表达式的结果输出到不直接是html元素内容的地方时,这非常方便.
// some_view.html.haml
:javascript
$('#mylink').click(function() {
$('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
};
Run Code Online (Sandbox Code Playgroud)
尝试这个,它应该工作(我所做的只是在第五行删除一个空格,并在第六行添加结束报价):
%script(type="text/javascript")
$('#mylink').click(function() {
$('#mylink').after('<select>
- @myarray.each do |options|
<option value="#{options.id}">#{options.name}</option>
</select>');
)};
Run Code Online (Sandbox Code Playgroud)
但是,假设您使用ruby脚本或类型框架运行此操作,为什么不在模板外部执行此操作?这可能是最合适的.在rails/sinatra和其他框架中,您可以使用辅助方法来执行此操作.如果你看一下haml参考,他们实际上不鼓励使用它-
来评估ruby.
归档时间: |
|
查看次数: |
48605 次 |
最近记录: |