使用js.coffee脚本混合ruby代码

时间:2012-11-30 16:58:26

标签: javascript jquery ruby-on-rails ajax coffeescript

我的视图上有ajax链接,我想在发送到实际操作之前检查密码,因为我使用的是设计控制器,我只能使用特定的密码检查。 以下是我希望用于验证的咖啡脚本。

  

。<%= link_to“CANCEL PAYMENT”,{:action => “some_action”,:info =>   n.id},class:“css_class”,:remote => true%>

我正在使用上面的链接

我正在寻找以下类型的代码。

$("a.css_class").live "click", ->
      password_variable = prompt("Enter password", "password")
      if |ruby-code|current_user.valid_password?(password_variable)|ruby-code|
        true
      else
        alert "You entered wrong password"
        false

红宝石代码如何与咖啡脚本混合使用。

2 个答案:

答案 0 :(得分:4)

如果它是您静态资产的代码,那么显然您将无法将一些服务器端动态放入其中。它将被转换为纯JavaScript代码段并放入应用的public文件夹中。

如果您的视图名为* .coffee,那么您已经完成了所有准备工作。以这种方式命名的视图将使用ERb引擎(通过<%= ... %>)自动预处理:

视图中的

/some/thing.coffee:

alert "Server's time is <%= Time.now %>"

答案 1 :(得分:0)

我有同样的疑问。

背景:

我正在为我的公司编写ERP。它使用西班牙语,英语和日语的消息。

我正在使用coffeescript,haml,scss,NO ERB

因此,多语言消息在我的所有视图中都能正常工作,但是,我添加了一个.js库,用一个带有下拉列表的漂亮的组合框替换浏览器的丑陋的dropbox,它使用哈希来保存本地语言中的消息。

所以我做的是:

_form.html.haml

:coffeescript
  menssages_for_select2 [
    "#{I18n.t('select.formatNoMatches')}"
    "#{I18n.t('select.formatInputTooShort')}"
    "#{I18n.t('select.formatInputTooLong')}"
    "#{I18n.t('select.formatSelectionTooBig')}"
    "#{I18n.t('select.formatLoadMore')}"
    "#{I18n.t('select.formatSearching')}"
  ]

我在视图中执行此操作,因此我可以访问I18n库。如果我尝试访问.js.coffee中的I18n库,则会失败

现在,在

mycode.js.coffee

@mensajes_select2 = (txt) ->
  $.extend $.fn.select2.defaults,
    formatNoMatches: ->
      txt[0]
    formatInputTooShort: (input, min) ->
      txt[1]
    formatInputTooLong: (input, max) ->
      txt[2]
    formatSelectionTooBig: (limit) ->
      txt[3]
    formatLoadMore: (pageNumber) ->
      txt[4]
    formatSearching: ->
      txt[6]