Rails 在 js 中嵌入 ruby 代码

sforce100 · 2012年11月07日 · 最后由 sforce100 回复于 2012年11月07日 · 3482 次阅读

在 js 里面我可以这样拼接 url 吗 var $search_url = <% url_for :controller => "plan", :action => "show" %> + $Text_search.val() + ".json"

这样写当然是没问题的,不过总归看着让人不舒服,不过你可以试试用一个隐藏的 html 标签(如:一个隐藏的 a 标签)然后通过 js 去获取这个 a 的 href。

貌似你是需要 js 里引入应用配置,也许这个对你有用 http://ruby-china.org/topics/6167

#1 楼 @uudui 这个方法值得尝试,但我想知道,为什么我 var test = <%= "txt"%>这样也不生效,那个 XXX.js

#3 楼 @sforce100 var test = ’<%= "txt"%>‘这样试试

#4 楼 @uudui 这样就比解析直接把<%= "txt"%>当成字串了

楼主确定文件名是 xxx.js.erb 吗

#4 楼 @uudui 应该是“ ”,才能解析

#6 楼 @shawnyu 我加了双引号才可以,但是如果我想用 url_for 之类的方法,就说没定义,难道要加头文件??

# let us say
# <%= url_for :controller => "plan", :action => "show" %>  => '/plans/show'

var $search_url = <%= url_for :controller => "plan", :action => "show" %> + $Text_search.val() + ".json"

被编译成这样 

var $search_url = /plans/show + $Text_search.val() + '.json'

 /plans/show 被js认为是undefined  因为不属于任何已知的数据类型

所以 
var $search_url = "<%= url_for :controller => 'plan', :action => 'show' %>" + $Text_search.val() + '.json'

这样才会被正确编译为

var $search_url = “/plans/show” + $Text_search.val() + '.json'

@uudui @sforce100

注意一下单引号和双引号的区别

单引号表示里面的内容不用被翻译 就是一个字符串 双引号表示里面的特殊内容要被翻译

puts '#{Rails.root}'
=> #{Rails.root}


puts "#{Rails.root}"
=> /home/xxxx/xxxx

#10 楼 @shawnyu 谢谢你的好意,不过大哥你这个是 ruby 语法,而我 var test = ’<%= "txt"%>‘,这明显是对一个 js 变量赋值。建议你先去看看 js 中单引号和双引号的区别哈

#10 楼 @shawnyu 其实这个我懂的,只是没想到要用双引号阔起来,我快疯了。。undefined method `url_for' for #<#Class:0x000000059bb248:0x00000006c7ba18>

需要 登录 后方可回复, 如果你还没有账号请 注册新账号