2016-04-17 10 views
0

私は下のコードのようなcoffeescriptでいくつかの反応コードを持っています。 _fetchKitesDoneはAJAXを介してデータを正しく取得しますが、レンダリングは常に「データの読み込み中...」と表示されて終了します。setStateが正しく起動していないと判断し、反応にバインドしていないコンポーネントの "this"スコープです。これにバインドするにはどうすればいいですか?このcoffeescriptのReactでsetStateを正しく呼び出せますか?

以下のコードではどうすればよいですか?それが問題でないなら、それは何ですか?

@ChartContainer = React.createClass 
    # Display name used for debugging 
    displayName: "ChartContainer" 

    # set initial state before mounting component 
    getInitialState: -> 
    #some state 
    fetchedData: false 
    kitesData: [] 

    componentDidMount: -> 
    # fetch the data 
    @_fetchKites({}) 

    _fetchKites: (data) -> 
    $.ajax 
     url: "/kites.json" 
     dataType: 'json' 
     data: data 
    .done @_fetchKitesDone 
    .fail @_fetchDealsFail 

    # If the AJAX call is successful ... 
    _fetchKitesDone: (data, textStatus, jqXHR) -> 
    # Change component state & cause children to render again 
    labels = [] 
    kiteValues = [] 
    for key of data 
     labels.push(key) 
     kiteValues.push(data[key]) 
    stringData = { 
     labels: labels, 
     datasets: [ 
     { 
      fillColor : "rgba(220,220,220,0.5)", 
      strokeColor : "rgba(220,220,220,1)", 
      pointColor : "rgba(220,220,220,1)", 
      pointStrokeColor : "#fff", 
      data : kiteValues 
     } 
     ] 
    } 
    @setState 
     fetchedData: true 
     kitesData: stringData 

    # If errors in AJAX call ... 
    _fetchDealsFail: (xhr, status, err) => 
    console.error @props.url, status, err.toString() 

    render: -> 
    if (@state.kitesData.length > 0) 
     <div> 
     in here 
     </div> 
    else 
     <div>Loading data...</div> 
+0

機能が正しくバインドされています。現状のままにしておきます。問題は 'stringData'が配列ではなくオブジェクトであることです。あなたのレンダリングコードでは常に '{} .length'が返されます。これはいつもundefinedを返します –

答えて

0

あなたは$.ajax内部this値は、あなたのコンポーネントではありません右です。

_fetchKites: (data) -> 
    $.ajax 
     url: "/kites.json" 
     dataType: 'json' 
     data: data 
    .done (data, textStatus, jqXHR) => 
     @_fetchKitesDone(data, textStatus, jqXHR) 
    .fail (jqXHR, textStatus, errorThrown) => 
     @_fetchDealsFail(jqXHR, textStatus, errorThrown) 
+0

どのようなコンテキストですか? –

+0

私はそれを感謝しました(私はあなたが私の削除されたコメントに応答していると仮定します) – Nona

関連する問題