私はこれを行う方法を数日間試し、構築されたソリューションを探しましたが、残念ながら成功しませんでした。
カスタムメイドのeコマース製品の管理セクションを作成しています。この管理領域は、完全にSPA(シングルページアプリケーション)として構築されており、AJAX呼び出しを介して「ko」テンプレートとそのデータを動的にロードします。
さて、当面の問題は、このkoテンプレート内にグラフ、円、およびその他のデータ視覚化要素を含めたいということです(つまり、ダッシュボードテンプレートでグラフにうまく表示された要約データ)。
このために、適切に呼び出されるGoogleChartAPIの「KOカスタムバインディング」に取り組んでいます。
これは私が今まで持っていたものであり、固定チャートを作成します(このサンプルからKOに適合)
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'を呼び出す前に、'element'の内容はすべてそこにあり、アクセス可能です。次にJavascript runtime error: Access is denied
、コールバックが呼び出されたときにを取得します。
私はこれで立ち往生しているので、いくつかの助けを得ることを願っています。ありがとう!ルイス