我正在使用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);似乎並沒有真正改變這個值,因爲它總是讀爲空。不知道爲什麼會這樣。 –
它在'chart1'餘燼對象上讀取爲null?或者它從socket.io中讀取爲null? Ember通過使用'.set()'來觸發更改,看起來就像你正在做的那樣。我已經更新了twiddle以在5秒後更改appName,這表明觀察者仍然觸發。基本上,只要確保你的套接字io回調中有一個新的值。 –
因爲我可以運行chart1.get('outdoorTemp'),因此outdoorTemp值似乎已設置,它將返回正確的數據。問題似乎是,無論出於何種原因,觀察者都沒有注意到這種變化從未執行過。我已經注意到你的代碼和我的代碼之間的一個區別是,我正在做一個燼對象,而你的代碼在控制器中執行它。這可能是一個問題嗎? –