3

我的视图上有 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

ruby 代码将如何与咖啡脚本组合一起使用。

4

2 回答 2

4

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

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

视图/some/thing.coffee 中:

alert "Server's time is <%= Time.now %>"
于 2012-11-30T17:37:32.287 回答
0

我也有同样的疑问。

背景:

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

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

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

所以我所做的是:

_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]
于 2014-05-24T03:55:07.677 回答