このコンポーネント jchartfx を Durandel と統合しようとしています。私はデュランデルなしでノックアウトを使用するスタンドアロンのプロトタイプを持っており、完全に動作するので、問題はデュランデルに関連していると確信しています.
これが私のビューモデルコードです:
define(function (require) {
var http = require('durandal/http');
var serverUrl = '/api/burndown';
var chart1;
function burnDownModel() {
var self = this;
self.initilize = true;
self.displayName = 'Burndown Chart';
self.description = 'Burndown Chart';
self.chartData = ko.observableArray([]);
self.viewAttached = function() {
};
// testing with fake data
self.activate = function () {
return http.get(serverUrl).then(function (response) {
for (var i = 0; i < 10; i++) {
var data = {
"Date": '2013-02-18T00:00:00',
"DevCurrentEstimates": 6.5,
"TestCurrentEstimates": 7.5,
"DevOriginalEstimates": 8.5,
"TestOriginalEstimates": 9.5
};
self.chartData.push(data);
}
ko.bindingHandlers.jchartFx = {
init: function (element, valueAccessor) {
chart1 = new cfx.Chart();
chart1.getData().setSeries(4);
chart1.getAxisX().getLabelsFormat().setFormat(cfx.AxisFormat.Date);
chart1.getAxisX().getLabelsFormat().setCustomFormat("MMM-dd");
debugger;
var value = ko.utils.unwrapObservable(valueAccessor());
chart1.setDataSource(value);
chart1.create(element);
}
};
});
};
};
return burnDownModel;
});
そして私のhtmlバインディング
<div id="ChartDiv1" class="chartdiv" data-bind="jchartFx:chartData"style="width:550px;height:400px;display:inline-block"></div>
私が言ったように、私はデュランデルなしでこれを機能させています。
そのソリューションのスクリプトは次のとおりです。
<script type="text/javascript">
$(function () {
var viewModel = {
chartDatas: ko.observableArray([])
};
LoadChartData();
function LoadChartData() {
for (var i = 0; i < 10; i++) {
var chartData = {
"Date": '2013-02-18T00:00:00',
"DevCurrentEstimates": 6.5,
"TestCurrentEstimates": 7.5,
"DevOriginalEstimates": 8.5,
"TestOriginalEstimates": 9.5
};
viewModel.chartDatas.push(chartData);
}
}
ko.applyBindings(viewModel);
});
</script>
私が見ることができる唯一の違いは、このスクリプトはページの読み込み時に実行され、Durandel が代わりに行うのではなく、手動で ko バインディングを適用する必要があることです。エラーは発生しません。グラフ データが表示されないだけです。