Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.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
Javascript 带有KendoUI图表的KnockoutJS组件仅适用于最后一张图表_Javascript_Knockout.js_Kendo Ui - Fatal编程技术网

Javascript 带有KendoUI图表的KnockoutJS组件仅适用于最后一张图表

Javascript 带有KendoUI图表的KnockoutJS组件仅适用于最后一张图表,javascript,knockout.js,kendo-ui,Javascript,Knockout.js,Kendo Ui,我有一个可观察的项目数组,可以创建带有参数的组件 在每个组件中,我使用该参数(通过AJAX)查询数据。我将该数据返回到一个可观察的数组中,并将该数组用作KendoUI图表的数据源 带有参数的已创建组件列表示例: <csglist params="account:'08167526'"></csglist> <hr> <csglist params="account:'0873458'"></csglist> <hr> <

我有一个可观察的项目数组,可以创建带有参数的组件

在每个组件中,我使用该参数(通过AJAX)查询数据。我将该数据返回到一个可观察的数组中,并将该数组用作KendoUI图表的数据源

带有参数的已创建组件列表示例:

<csglist params="account:'08167526'"></csglist>
<hr>
<csglist params="account:'0873458'"></csglist>
<hr>
<csglist params="account:'0828337'"></csglist>
<hr>
<csglist params="account:'086778'"></csglist>
创建图表

 function createChart() {    
      $("#" + self.act() + "chart").kendoChart({
        dataSource: {
          data: ko.toJS(self.categoryChart)
            //, sort: { field: "category", dir: "asc" }
        },
        title: {
          text: self.type()
        },
        legend: {
          visible: true,
          position: "bottom"
        },
        seriesDefaults: {
          type: "bar",
          stack: true
        },
        series: [{
          field: "sales",
          name: "Current Sales",
          color: "#66110F"
        }, {
          field: "opp",
          name: "Opportunity",
          color: "#E65F5B"
        }],
        valueAxis: {
          //   max: 180,
          line: {
            visible: false
          },
          minorGridLines: {
            visible: true
          },
          visible: false
        },
        categoryAxis: {
          field: "category",
          majorGridLines: {
            visible: false
          }
        },
        tooltip: {
          visible: false,
          template: "#= series.name #: #= value #"
        }
      });
    }
但是当所有组件都被创建时,只有最后一个组件有数据


有人能告诉我为什么会发生这种情况吗?

当我将buildChart=函数更改为self.buildChart=函数时,它工作了

你应该粘贴你正在填充数组的代码部分,因为问题似乎就在那里。你已经把jQuery和Knockout结合起来了。您需要一个绑定处理程序。Roy J你是说,既然我在数组中使用这个绑定,我需要创建一个绑定句柄来应用它?我是说所有DOM操作(除了一些纯粹的装饰性操作)都属于绑定句柄。当然,任何涉及viewmodel的DOM操作都可以。jQuery选择器在viewmodel代码中是一种严重的代码气味。
 function createChart() {    
      $("#" + self.act() + "chart").kendoChart({
        dataSource: {
          data: ko.toJS(self.categoryChart)
            //, sort: { field: "category", dir: "asc" }
        },
        title: {
          text: self.type()
        },
        legend: {
          visible: true,
          position: "bottom"
        },
        seriesDefaults: {
          type: "bar",
          stack: true
        },
        series: [{
          field: "sales",
          name: "Current Sales",
          color: "#66110F"
        }, {
          field: "opp",
          name: "Opportunity",
          color: "#E65F5B"
        }],
        valueAxis: {
          //   max: 180,
          line: {
            visible: false
          },
          minorGridLines: {
            visible: true
          },
          visible: false
        },
        categoryAxis: {
          field: "category",
          majorGridLines: {
            visible: false
          }
        },
        tooltip: {
          visible: false,
          template: "#= series.name #: #= value #"
        }
      });
    }