【问题标题】:Rails: Appending and Interpolating Code in JavascriptRails:在 Javascript 中添加和插入代码
【发布时间】:2012-07-19 19:15:15
【问题描述】:

我有一个灯箱,我想在其中渲染 Rails 部分,如下所示:

var data = "render :conversations => new";
$('#lightbox').append('#{escape_javascript(data)');

不幸的是,这会导致灯箱中出现文本“render :conversations => new”,而不是实际呈现。我认为这是因为我在附加部分而不是在运行时渲染它。我遵循了this thread 上的建议,但收效甚微。它建议我在附加行前面添加一个“!=”,如下所示:

!= "$('#lightbox').append('#{escape_javascript(data)');"

由于“!=”,这会引发语法错误。也许我错误地使用了这个符号,但我在谷歌上找不到任何关于它的信息。我怎样才能让它工作?

【问题讨论】:

    标签: javascript ruby-on-rails append interpolation


    【解决方案1】:

    我想你想做:

    $('#lightbox').append('#{escape_javascript(render :conversations => new)');
    

    但我真的不明白您的代码如何导致附加文本“render :conversations => new”。 var data = "render :conversations => new"; 看起来像 JavaScript,escape_javascript(data) 是服务器端 ruby​​,所以它不知道 data。我还注意到#{ 没有结尾}。这真的是您测试的确切代码吗?

    【讨论】:

    • 所有优点。不幸的是,即使使用正确的语法,代码也不会插入,而是呈现:“#{escape_javascript(render :conversations => new)}”
    • 好吧,但在那之前是“#{escape_javascript(data)}”吗?这是在静态js文件还是在rails erb模板等中?如果是模板,我认为您应该使用 erb 语法 <%= ... %> 而不是 ruby​​ 字符串插值 #{ ... }
    • 不幸的是,它在一个静态 js 文件中——而且是一个相当大的文件。 (它处理灯箱的所有方面。)我在资产管道中确实有它,但我假设这对修补 erb 语法没有帮助。
    • 啊,我想这就是我需要的小费!我将 js 文件更改为 js.erb,它似乎可以正常工作。我遇到了一些其他错误,但至少它现在似乎正在插值。
    • 错误是什么?不确定模板渲染将如何与资产管道一起工作。更新:看起来是个坏消息:github.com/rails/rails/issues/1370
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多