【问题标题】:Rails variables not working in JavaScript codeRails 变量在 JavaScript 代码中不起作用
【发布时间】:2013-10-12 18:38:30
【问题描述】:

在我可以访问Folder 模型的Rails 部分中,有些JavaScript 奇怪地无法正常工作。 Folder 模型具有属于它的 Submission 模型的实例。文件夹实例的示例 JSON 如下所示:

{"created_at":"2013-09-24T18:55:54Z","id":2,"parent_id":null,"title":"Tumblr Drafts","updated_at":"2013-09-24T18:55:54Z","user_id":1,
"submissions":
[{"content":"This is a test.","created_at":"2013-09-30T23:00:00Z","folder_id":2,"id":93,"parent_id":null,"title":null,"updated_at":"2013-09-30T23:00:00Z","user_id":1}],"children":[]}

如您所见,提交内容包含在 JSON 中。控制器动作如下所示:

    def show
        respond_to do |format|
            format.html
            format.js
            format.json {render :json => @folder.as_json( :include => [:submissions, :children])}
        end
    end

但是,当我尝试运行此 JavaScript 时,它不会返回 console.log:

<script type="text/javascript">
      var wordCount = 0;
      <% @folder.submissions.each do |submission| %>
        var words = <%= submission.content %>.split(' ');
        wordCount += words.length;
      <% end %>
      console.log(wordCount);
    </script>

我在有问题的部分中的其他任何地方都使用了@folder 变量,并且它有效。我什至可以将所有提交的标题输出到&lt;p&gt; 标签中。是不是因为内容字段可以留空,所以有时会返回null?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby json


    【解决方案1】:

    你的问题就在这里:

    var words = <%= submission.content %>.split(' ');
    

    这会将您的 submission.content 值转储到您的 JavaScript 中而无需任何引用,因此您最终会说:

    var words = blah blah blah.split(' ');
    

    这不是有效的 JavaScript。您需要引用该字符串并正确转义它:

    // You may or may not want submission.content HTML encoded so
    // you might want submission.content.html_safe instead.
    var words = '<%=j submission.content %>'.split(' ');
    

    或者更好的是,只需在 Ruby 中完成所有操作,而不是向浏览器发送一堆丢弃的文本:

    <script type="text/javascript">
      var wordCount = <% @folder.submissions.map { |s| submission.content.split.length }.sum %>
      console.log(wordCount);
    </script>
    

    这假设您的 JavaScript .split(' ') 确实打算在 /\s+/ 上拆分,而不仅仅是单个空格。

    【讨论】:

    • 啊,是的。不敢相信我没有注意到我在做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多