Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 画布在durandal+typescript的小部件中不起作用_Knockout.js_Typescript_Durandal - Fatal编程技术网

Knockout.js 画布在durandal+typescript的小部件中不起作用

Knockout.js 画布在durandal+typescript的小部件中不起作用,knockout.js,typescript,durandal,Knockout.js,Typescript,Durandal,我为durandal+typescript项目编写了一个小部件。小部件包含一个画布。但画布只显示一次。其他html元素工作良好,它们显示的时间与我调用widget的时间相同 以下是小部件视图文件: <section class="leftbarchart" data-bind="foreach: { data: settings.items }"> <canvas width="330" height="72"></canvas> <di

我为durandal+typescript项目编写了一个小部件。小部件包含一个画布。但画布只显示一次。其他html元素工作良好,它们显示的时间与我调用widget的时间相同

以下是小部件视图文件:

<section class="leftbarchart" data-bind="foreach: { data: settings.items }">
    <canvas width="330" height="72"></canvas>
    <div class="text-scale">
      <div style="float: left;width:50px;" data-bind="text: $data[Object.keys($data)[0]].labels[0]"></div>
      <div style="float: right;width:50px;text-align: right;" data-bind="text: $data[Object.keys($data)[0]].labels[2]"></div>
      <div style="text-align: center" data-bind="text: $data[Object.keys($data)[0]].labels[1]"></div>
    </div>
</section>
如果我将索引更改为[0],它只显示第一个小部件的画布。它是[6],只显示第7个小部件的画布。
如何让每个小部件都显示画布?

这是一个很难回答的问题,因为它有点复杂。很难知道这里发生了什么。如果你有一个小部件,你应该能够在不同的地方独立地绑定它。然后,每个小部件将只有一个子画布。这就是您在小部件的viewModel中返回构造函数的目标?如果没有,那么您手中就有一个singleton viewModel,这将导致画布或画布背后的逻辑被共享。您可以发布整个viewModel,但不发布TypeScript,即发出的JavaScript吗?可能无效,但:使用循环?
private canvas :HTMLCanvasElement;
private ctx :CanvasRenderingContext2D ;

public attached(element:HTMLElement){
        this.canvas = element.getElementsByTagName("canvas")[6];//<HTMLCanvasElement>$('canvas', element)[0];//
        this.ctx = this.canvas.getContext("2d");
        this.drawLine(this.ctx, this.origin[0], this.origin[1], this.origin[0] + this.width, this.origin[1]);
        this.drawLine(this.ctx, this.origin[0], this.origin[1] + this.height, this.origin[0] + this.width, this.origin[1] + this.height);

        for (var i = 0; i < 5; i++) {
            this.drawLine(this.ctx, this.origin[0] + this.unitWidth * 2 + this.unitWidth * i, this.origin[1], this.origin[0] + this.unitWidth * 2 + this.unitWidth * i, this.origin[1] + this.height, [1.5]);
        }

        this.drawCurrentBar(this.ctx, 0.7);
        this.drawLastBar(this.ctx, 0.9);
        this.wrapText(this.ctx, "Business Performance", 20, 40, 50, 20);
    }
this.canvas = element.getElementsByTagName("canvas")[6];