【发布时间】:2014-11-02 05:04:41
【问题描述】:
我正在尝试创建一个自定义的 Knockout 组件来环绕 Google Chart 的图表(或与此相关的任何图表库)。
理想情况下,我想制作一个带有保存图形数据的视图模型的组件。一旦使用自定义绑定绑定了该组件,每当调用更新函数时,我都会使用数据访问该数组,添加新值,并告诉图形重绘。
问题是当我在绑定处理程序的更新函数中时,我看不到图形的视图模型。我怎样才能访问它?
组件:
ko.components.register('line-graph', {
viewModel: function(params) {
var self = this;
self.data = new google.visualization.DataTable(
{
cols: [{id: 'index', label: '', type: 'number'},
{id: 'value', label: '', type: 'number'}]
}, 0.6);
self.currentPoint = 1;
self.lastValue = null;
},
template:
'<div></div>'
});
绑定:
ko.bindingHandlers.lineGraph = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var observable = valueAccessor();
if(observable != null){
//Here, the viewmodel and all properties of the bindingContext correspond to the main viewmodel, not the graph's viewmodel
viewModel.data.addRow([viewModel.currentPoint++, value]);
drawChart();
}
viewModel.lastValue = value;
}
}
更新:这是我计划使用绑定的方式。 pressureValue 变量将是我的主视图模型中的一个值,该值在后台不断更新。
<line-graph data-bind="lineGraph: pressureValue"></line-graph>
有什么想法吗?我是不是在错误地处理这个问题?
【问题讨论】:
-
组件不是绑定,您的模板值是否缺少上面示例中的某些数据绑定以及
var self=this;?您还可以显示正在使用淘汰组件的 HTML 吗? -
我在帖子中添加了我的计划用法,我似乎也错过了复制 var self = this;。谢谢!