1

プロジェクトにd3.jsを取り込もうとしていますが、RubyonRailsバックエンドから提供されているJSONオブジェクトにアクセスする方法がわかりません。

これが私のコントローラーコードです:

class CoursesController < ApplicationController
respond_to :html, :json

def course
  @course = Course.find(params[:id])
  respond_with @course do |format|
    format.html
    format.json {render json: @course}
  end
end

私はコンソールとビューの両方で、情報にアクセスする方法を理解しようとしています。(ちなみに、respond_withブロックを破棄して、レンダリングJSONブロックを保持すると、JSONオブジェクトが実際には応答オブジェクトであることがわかります)。

これが私が(ビューで)試したことです:

<%= javascript_tag do %>
  var data  = d3.json('<%= @course %>');
  console.log(data);
<% end %>

これはオブジェクトを返しますが、オブジェクトは未定義なので、次のように呼び出します。

dataset[0].course.course_name;

次のエラーが発生します。

TypeError: Cannot read property 'course' of undefined

また、コンソールで次のようなものを試しました。

var url = '/courses/1';
var dataset = d3.json(url);
dataset[0].course.course_name; 

しかし、同じエラーが発生します。

私はjsに比較的慣れていないので、新人の間違いを犯している可能性がありますが、それが何であれ、私はそれを見ることができません!

助けてくれてありがとう!

4

1 に答える 1

3

問題は、1 つのパラメーターを持つ d3.json 関数 ( https://github.com/mbostock/d3/wiki/Requests#wiki-d3_json ) が要求を返すことです。その後、そのリクエストを発行する必要があります。

「典型的な」使用法は、コールバック関数を使用して 2 番目のパラメーターを使用することです。これは非同期コールバックであるため、戻り値を var に割り当てることはできません。

これが私が提案するものです:

var url = '/courses/1';
d3.json( url, function( error, data ) {
    console.log( data );
    // do all actions required now that the data is retrieved
} );
于 2013-01-30T16:22:57.213 に答える