javascript - 在 Chart.js 中使用和读取 Knockout.js 中的变量

标签 javascript html knockout.js chart.js

我使用 knockout.js 和 Jquery 从 IO 中提取 pd-Data 并不断更新它。我的目标是然后将其与 Chart.js 交叉以绘制随时间变化的 pd 数据。我的问题是我的图表没有更新任何数据。

我目前有用于将数据提取到单独的 .js 文件中的 API,但 Chart.js 位于 <script> 下html 文件中的标记。我尝试了几种不同的方法,例如用 id 标记并使用 document.getElementById()。到目前为止还没有运气。

setInterval(function() {
  time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
  pdData = parseInt(document.getElementById("value").value);
  addData(window.myLine, time, pdData);
  removeData(window.myLine);
}, 3000);

function addData(chart, label, data) {
  config.data.labels.push(label);
  config.data.datasets.forEach((dataset) => {
    dataset.data.push(data);
  });
  window.myLine.update();
}

function removeData(chart) {
  config.data.labels.pop();
  config.data.datasets.forEach((dataset) => {
    dataset.data.pop();
  });
  window.myLine.update();
}

如果需要,我可以从 API 脚本中添加更多内容,但我当前的问题是 pdData 没有加载值(或任何值),并且图表没有随着时间的增加和数据的更新而更新。我收到的唯一错误是 .update()对于我创建的图表来说不是一个有效的函数。

最佳答案

您应该做的是为 ChartJS 创建一个自定义绑定(bind)处理程序:

ko.bindingHandlers.chartJS = {
    update: function (element, valueAccessor) {
        // do the chartJS stuff here
        // access the chart data by calling valueAccessor()
    }
};

然后你可以在模板中调用它,如下所示:

<canvas data-bind="chartJS: myChartData"></canvas>

其中 myChartData 是 View 模型上的(可观察的)属性。如果数据发生变化(通过 AJAX 调用),您的图表将自动更新。

关于javascript - 在 Chart.js 中使用和读取 Knockout.js 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57711052/

相关文章:

javascript - onbeforeunload 有什么方法可以知道是重新加载还是离开?

javascript - 非捕获组仍然捕获输入

javascript - 阻止脚本在不需要的页面上运行

javascript - knockout JS "You cannot apply bindings multiple times to the same element"

javascript - 圆形数组中两个元素之间的最小距离

javascript - 在 ajax 成功时返回 json 消息

javascript - 如何将动态生成的 div 的 id 传递给 Rails 中的 javascript

javascript - 如何使图像适合框架,保持纵横比和缩略图列表的中心

javascript - javascript Node 模块和纯脚本引用如何在浏览器中共存?

javascript - 如何在不同 View 模型之间的 Knockout 中发出事件