1

私は控えめなJavaScriptを書き込もうとしていますが、私の見解では次のようになっています。

<%= javascript_include_tag "trend" %>

そして私のtrend.js.erbには次のものがあります:

$(document).ready(function() {

    <% @testsss.each do |t|%>

        $('#<%= "t-"+t.id.to_s %>').click(function(event){
            //alert("sometext");
            $.ajax({type: "GET", url: "/returngraph?test=<%= t.id.to_s %>", dataType: "html",success: 
            function(data){ $("#chart").html(data)} });

        }); 

    <% end %>


});

しかし、私はNoMethodErrorを取得しました...私が間違っていることは何ですか?@testsssはオブジェクトのセットであり、同じ@testsss.eachがtrend.html.erbで機能します。ここからjavascript_include_tagを「trend」と呼びます。

ありがとうございました

編集:

ここに実際のエラーがあります:

NoMethodError in Statisticall#trend

Showing /xxxx/app/views/statisticall/trend.html.erb where line #1 raised:

undefined method `each' for nil:NilClass
  (in /xxxx/app/assets/javascripts/trend.js.erb)
Extracted source (around line #1):

1: <%= javascript_include_tag "trend" %>
2: <div id="hhead">

私はコントローラーの統計とアクションの傾向を持っています

4

1 に答える 1

2

@testsss はコントローラーで定義されていると思います。

アセット パイプラインはコンパイルされていないか、アクション コントローラーによって処理されていないため、パイプライン内のコントローラーに割り当てるインスタンス変数を使用することはできません。

回避策には @testsss.to_json を含め、それを JS 変数としてビューに含めます

何かのようなもの

#app/views/some/view.html.erb
<script type='text/javascript'>
 window.testsss = <%= @testsss.tojson %>
</script>

次に、JavaScriptでunderscore.jsを使用してこのようなことを行います

  _(testsss).each(function(t){
    $('#t-'+ t.id).click(function(event){
         //alert("sometext");
         $.ajax({type: "GET", url: "/returngraph?test=" + t.id, dataType: "html",success: 
         function(data){ $("#chart").html(data)} });
     }); 
  });

または、アセット パイプラインではなくビュー内でその js をレンダリングできます

#app/views/some/view.html.erb
<script type='text/javascript'>
  $(document).ready(function() {
    <% @testsss.each do |t|%>
      $('#<%= "t-"+t.id.to_s %>').click(function(event){
        $.ajax({
          type: "GET",
          url: "/returngraph?test=<%= t.id.to_s %>",
          dataType: "html",
          success: function(data){ $("#chart").html(data)}
        });
      }); 
    <% end %>
  });
</script>

このようにすると、js のアクション コントローラーにインスタンス変数が割り当てられるという利点がありますが、メイン ページの読み込みに時間がかかるという欠点があります。

私は最初のアプローチを好みますが、それはあなた次第ですか?

于 2012-05-26T23:04:51.917 に答える