Rails 如何在 coffeescript 中插入 rails 代码

ane · 2014年07月01日 · 最后由 zj0713001 回复于 2014年07月01日 · 3329 次阅读

最近在写重构,想把本来是写在 erb 中的 js 写到单独的 coffee 中,写着写着发现这样的代码

$.get("/ajax/add/company/followers", {current_user_id : <%= current_user_id %>, company_ids : company_ids }, function (data) {
          if (data.success)
            $this.parent().empty().append("<a class='mba_btn'>已关注</a>");      
        }, 'json');      

瞬间被这个<%= current_user_id %>难住了。好像 coffee 是不支持插入值。有什么办法可以绕过去,大早上,脑袋很不清醒啊,大脑混沌中

不行的吧,部署时 coffeescript 是要编译成静态 js 文件的,那时还没有 current_user_id。

在 js 中定义一个全局变量,然后页面载入时给这个 js 全局变量赋值

#1 楼 @libuchao 其实,我是觉得这样的写法本身就是不合理的。有什么办法,可以修改这种直接在 js 中写 rails 了?

#2 楼 @ane filename.js.coffee.erb 中是可以写 <%= ... %> 的,但必须是编译时就能确定的值

楼主,没有像你这么写的。常用做法是给 div 加 id,比如<div id="user-123">,然后 js 需要时自己去取出 id。

#4 楼 @billy 不是我写的。所以。。。下午看看它具体逻辑再考虑吧。饿晕了

给 dom 加上 data-id='xxx' 然后 js 里读 data

#6 楼 @zj0713001 哦,对,都忘记 HTML5 的 data.了,看来你是写了不少页面啊。呵呵

通常就是楼上那么做的 如果是 current_user_id 这类全局通用的值,可以写到 window 里面

<!-- *.erb -->
<script>
window.current_user = {id: 1, name: ''};
</script>

传值的话可以用 gon 这个 gem

#9 楼 @guyanbiao thank you。6 楼方法很好,再加个 gem,似乎用力太猛了

我似乎习惯用 jquery_ujs 自带的来做。一个 link_to method 为'PUT',其中的逻辑在 controller 中实现。不会用到任何 js。

#11 楼 @hxplove01 所以这就是我重构的原因了,要让它更干净

#7 楼 @ane jquery 的 data 就行 $(xxx).data('') 哎 页面也要写啊...

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