几天来,我一直在尝试如何做到这一点,并在谷歌上搜索构建的解决方案,但遗憾的是没有成功。
我正在为定制的电子商务产品构建一个管理部分。此管理区域完全构建为 SPA(单页应用程序),通过 AJAX 调用动态加载“ko”模板及其数据。
现在,手头的问题是我想在这个 ko 模板中包含图表、饼图和其他数据可视化元素(即在仪表板模板中很好地显示在图表上的汇总数据)。
为此,我正在为Google Chart API开发一个“KO 自定义绑定”,该 API正在被正确调用。
这是我到目前为止所拥有的,它创建了一个固定的图表(适用于 KO:this sample)
ko.bindingHandlers.googleChart = {
init: function (element, valueAccessor, allBindingsAccesor, viewModel, bindingContext) {
google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(function () {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Year');
data.addColumn('number', 'Revenue');
data.addColumn('number', 'Average Revenue');
data.addRows([
['2004', 1000, 630],
['2005', 1170, 630],
['2006', 660, 630],
['2007', 1030, 630]
]);
var options = {
title: 'Revenue by Year',
seriesType: "bars",
series: { 1: { type: "line" } },
vAxis: {
title: 'Year',
titleTextStyle: { color: 'red' }
},
colors: ['red', 'black']
};
var chart = new google.visualization.ComboChart($(element));
chart.draw(data, options);
});
}};
然后,从模板中,我调用绑定,现在传递“false”,或者来自 viewModel 的任何虚拟 ko.observable。
<script type="text/html" id="dashboard-admin-template">
<div data-bind="googleChart: false"></div>
</script>
现在,终于(对不起,花了这么长时间),我遇到的问题:
之后,google.load("visualization", "1", { packages: ["corechart"] });
“元素”内容变得不可访问(无法从我的 IDE 发布捕获,因为我是声誉问题的新手),使回调失败,并且不呈现图表。在调用“google.load”之前,“元素”的内容都在那里,并且可以访问。然后Javascript runtime error: Access is denied
在回调被调用时得到一个。
希望能得到一些帮助,因为我被困在这个问题上。谢谢!路易斯