JavaScript - for循环中的函数未按预期执行

时间:2014-05-14 06:25:18

标签: javascript splunk

我正在构建一个绘制一些数据的仪表板。使用splunk js图表显示数据。

我的问题不在于图表。但我怀疑我的逻辑。

发生了什么:

  1. 客户端 - 从服务器请求图表数据
  2. 服务器 - 返回此对象:
  3. Object { splunkResults: Array[3], 
    metricHTML: "<div id="MetricOne" class="metric"><p class="lead"…s="metric">
    <p class="lead">Metric Three</p></div>", metricID: Array[3]}
    
    1. Client - model.js通过回调调用view.insertMetricContainers并将object.metricHTML插入正确的容器
    2. 客户端 - model.js通过回调调用for循环中的view.graphsReady并创建一个图表并根据object.metricID [i]
    3. 将其插入到正确的度量div中
    4. 显示客户 - 图表
    5. 我的问题是只显示了一个图表,第一个图表。

      如果你在view.js中查看这个函数:

      splunkjs.UI.ready(chartToken, function() {});
      

      我有一个console.log(&#34; test&#34;);这只打印一次。

      我的错误是什么?

      如果我能提供更多信息,请告诉我,我尝试了一些方法并且已经用完了想法。

      Model.js

      dashboard.getSystemMetrics = function(callback) {
          var url = "/services/systemMetrics/?";
          if (dashboard.url[1]) {
              url = url + dashboard.url[1];
          }
          if (dashboard.limit) {
              url = url + "&limit=" + dashboard.limit;
          }
      
          $.get(url, function(response) {
              callback(response.metricHTML, null);
      
              for (var i = 0; i < response.splunkResults.length; i++) {
                  console.log(i);
                  callback(null, response.splunkResults[i], response.metricID[i]);
              }
          });
      };
      

      View.js

      view.graphsReady = function (data, id) {
          console.log(id);
          var chart = null;
          var chartToken = splunkjs.UI.loadCharting('/javascripts/splunk.ui.charting.js', function() {
              // Once we have the charting code, create a chart and update it.
              chart = new splunkjs.UI.Charting.Chart($("#" + id), splunkjs.UI.Charting.ChartType.AREA, false);
          });
      
          splunkjs.UI.ready(chartToken, function() {
      
              chart.setData(data, {
                  "chart.stackMode": "stacked",
                  "legend.placement": "top",
                  "axisTitleX.text": "Time",
                  "axisTitleY.text": "Data"
              });
              chart.draw();
          });
      };
      

      Controller.js

      $(function(){
          // Grab user params
          dashboard.url = window.location.href;
          dashboard.url = dashboard.url.split("/?");
          dashboard.limit = "day";
          // Get Service Statuses
          //dashboard.getQuickStatus(controller.quickStatusReady);
      
          // TODO listener events
          dashboard.getSystemMetrics(controller.systemMetricsReady);
      });
      
      
      
      controller.systemMetricsReady = function(html, data, id) {
          if (html) {
              view.insertMetricContainers(html);
          } else if (data && id) {
              view.graphsReady(data, id);
          }
      };
      

      如果您想提出更好的问题标题,请务必继续。

      编辑 - 我检查了日志是的。没有错误,如果我有错误,我也不会问这个问题。

      我在set data function(view.js)中做了一个console.log,它只记录了一次,就像它应该有的那样。虽然函数graphReady被称为3次

      UPDATE - 我在view.js代码中发现此函数只运行一次。尽管函数view.graphsReady被调用了3次。

      var chartToken = splunkjs.UI.loadCharting('/javascripts/splunk.ui.charting.js', function()   {
          // Once we have the charting code, create a chart and update it.
          chart = new splunkjs.UI.Charting.Chart($("#" + id), splunkjs.UI.Charting.ChartType.AREA, false);
          console.log(chart);
      });
      console.log(chartToken);
      

      因此,chartToken打印3次。但是,图表只打印一次。

0 个答案:

没有答案