私はember-cli-chart(ChartJSラッパー)を使用して時系列データをグラフに表示するWebアプリケーションを開発中です。私はsocket.ioを使用して現在のデータをWebアプリケーションに送信して表示します。Emberオブジェクト内のEmberjsバインディングプロパティ
socket.on('timeSeriesData', function(data){
chart1.set('outdoorTemp', data); //Sets data on signal from socket.io
});
var chart1 = Ember.Object.create({
outdoorTemp: null, //This variable is successfully set on the signal above
data: {
labels: [], //Don't need labels for now
datasets: [
{
label: "Energy Consumption in KW/H",
fillColor: "rgba(219, 66, 0, .25)",
strokeColor: "rgba(209, 0, 0, 1)",
pointColor: "rgba(209, 0, 0, 1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(209, 0, 0, 1)",
data: Ember.computed.alias('outdoorTemp') //This value does not get set to outdoorTemp
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
scaleFontColor: '#fff',
scaleShowGridLines: false,
scales: {
yAxes: [{
scaleLabel: {
display: true,
labelString: 'probability'
}
}]
}
}});
ここでの目標は、新しいデータがsocket.ioから受信されるたびにリアルタイムでグラフを更新することでした。私はchart1オブジェクト内のoutdoorTempプロパティにデータプロパティをバインドしようとしていますが、このデータバインディングは機能していないようです。私はこの問題に関する文書を読んだが、私がやっていることはうまくいくはずだが、そうではないようだ。この問題に対するより洗練された解決策がありますか?
ありがとうございました!これは私が持っていた問題を修正しましたが、新しい問題を明らかにしました。データがsocket.io関数で変更されていないため、オブザーバがトリガされることはありません。 socket.ioシグナルが受信されると、chart1.set( 'outdoorTemp'、data);それは常にnullとして読み取るので、実際にはその値を変更していないようです。なぜこれが起こっているのか分かりません。 –
'chart1' emberオブジェクトではnullと読み込まれますか?または、socket.ioの中からヌルとして読み込まれていますか? Emberは、あなたがしているように見える '.set()'を使って変更を引き起こします。私は5秒後にappNameを変更するために回転を更新しました。これは、オブザーバがまだトリガしていることを示しています。基本的には、ソケットioコールバックに新しい値が入っていることを確認してください。 –
chart1.get( 'outdoorTemp')を実行でき、適切なデータが返されるため、outdoorTemp値が設定されているようです。この問題は、何らかの理由でオブザーバーが変更を気付かずに実行されないことが原因と思われます。私があなたのツイールドコードと私の間に気づいた1つの違いは、あなたのコードがコントローラーでそれを行う間、私はemberオブジェクトでこれをやっているということです。これはおそらく問題だろうか? –