我有一个向表单添加新字段的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>);
)};
我也尝试过使用:javascript过滤器,但没有成功。
发布于 2010-04-15 05:19:15
通常,如果某件事是haml中的一个难题,这意味着你应该将棘手的部分重构为一个帮助器或部分,并调用它。
// some_helper.rb
def new_snazzy_select_tag(options = [])
select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end
此外,您应该使用:javascript
过滤器来呈现javascript,因为它会将其放入脚本标记中,并允许缩进。
最后,您可以在haml中的任何地方使用#{ruby_expression}
,包括:javascript
过滤器,当您需要将ruby表达式的结果输出到不是直接包含html元素内容的位置时,这非常方便。
// some_view.html.haml
:javascript
$('#mylink').click(function() {
$('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
};
发布于 2010-04-15 05:27:37
试一试,它应该有效(我所做的就是删除第五行中的一个空格,并在第六行添加结束引号):
%script(type="text/javascript")
$('#mylink').click(function() {
$('#mylink').after('<select>
- @myarray.each do |options|
<option value="#{options.id}">#{options.name}</option>
</select>');
)};
但是,假设您使用的是ruby脚本或某种框架,为什么不在模板之外运行呢?这可能是最合适的。在rails/sinatra和其他框架中,您可以使用helper方法来完成此任务。如果你看看haml参考文献,他们实际上不鼓励使用-
来评估ruby。
https://stackoverflow.com/questions/2640863
复制相似问题