Я работаю над веб-приложением, которое отображает некоторые данные временных рядов на графике с использованием ember-cli-chart (обертка ChartJS). Я использую socket.io для отправки текущих данных в веб-приложение для отображения.Свойства связывания Emberjs в объекте Ember
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. Я пытаюсь связать свойство данных с свойством outdoorTemp в объекте chart1, однако это привязка данных не работает. Я прочитал документацию по этому вопросу, и похоже, что я работаю, но это не так. Было бы более элегантное решение этой проблемы?
Спасибо! Это укрепило проблему, которую я испытывал, но пролил свет на новую проблему. Наблюдатель никогда не запускается, потому что данные не изменяются в функции socket.io. Когда принимается сигнал socket.io, chart1.set ('outdoorTemp', данные); похоже, фактически не изменяет это значение, поскольку оно всегда считается нулевым. Не знаю, почему это происходит. –
Он читается как null на элементе 'chart1' ember? Или он считывается как null изнутри socket.io? Ember запускает изменения с помощью '.set()', который выглядит так, как будто вы делаете. Я обновил twiddle, чтобы изменить имя приложения через 5 секунд, что показывает, что наблюдатель все еще запускает. В основном, просто убедитесь, что новое значение появляется в вашем обратном вызове сокета io. –
Значение outdoorTemp, похоже, установлено, потому что я могу запустить chart1.get ('outdoorTemp'), и он вернет правильные данные. Проблема заключается в том, что по какой-либо причине наблюдатель не замечает, что изменение таким образом никогда не выполняется. Одна разница, которую я заметил между вашим кодом twiddle и моим, заключается в том, что я делаю это в ember-объекте, пока ваш код делает это в контроллере. Возможно, это будет проблемой? –