我正在尝试将此组件jchartfx与Durandel集成。我有一个独立的原型,使用没有杜兰德尔的淘汰赛,并且工作完美,所以我确信这个问题与杜兰德尔相关。Durandal淘汰赛jchartfx
这里是我的视图模型代码:
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>
正如我说我有这个工作没有Durandel。
下面是该解决方案的脚本:
<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>
我能看到的唯一区别是,运行此脚本时,页面加载和我也有手动应用KO绑定,而不是Durandel做为了我。 我没有收到任何错误,只是没有显示图表数据。
我不知道到底为什么图表没有渲染,但似乎与DOM定时做。如果你把'chart1。在setTimeout中创建(元素)'调用像这样'setTimeout(function(){chart1.create(element);},100);',它似乎工作。 –
jchartfx假定它使用完整的DOM。在Durandal中,绑定是相对于尚未成为DOM的一部分的文档片段,直到初始绑定之后。 – mikekidder