Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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 延迟dojo小部件中的函数的调用,直到设置了全局变量_Javascript_Dojo - Fatal编程技术网

Javascript 延迟dojo小部件中的函数的调用,直到设置了全局变量

Javascript 延迟dojo小部件中的函数的调用,直到设置了全局变量,javascript,dojo,Javascript,Dojo,我有一个从外部js文件呈现的自定义饼图。我使用xhrget获取填充饼图所需的数据。我使用的url包含一个全局变量,但我的问题是脚本中的函数在设置全局变量之前被调用 这是我的密码: var chart1 = new dojox.charting.Chart2D(this.id,{fill:"transparent"}); chart1.setTheme(dojox.charting.themes.MiamiNice,{fill:"transparent"});

我有一个从外部js文件呈现的自定义饼图。我使用xhrget获取填充饼图所需的数据。我使用的url包含一个全局变量,但我的问题是脚本中的函数在设置全局变量之前被调用

这是我的密码:

    var chart1 = new dojox.charting.Chart2D(this.id,{fill:"transparent"});


        chart1.setTheme(dojox.charting.themes.MiamiNice,{fill:"transparent"});

        chart1.addPlot("default", {
        type: "Pie",
        labels: false,
         labelStyle: "rows",
        precision: -10,
        fontColor: "black",
        labelOffset: -20,
        radius: 150
      });

      console.log(this.getURLFunction(this.id ));

        chart1.theme.plotarea.fill = undefined;
        this.xhrDeferred = dojo.xhrGet({
            url: this.getURLFunction(this.id)**,//"../traffic-analysis/get-ip-dist/format/json/ds/1/data/rate/tTime/1334787567/fTime/1334182767/time/604800/drilldown/true/displayedTime/enabled?dojo.preventCache=1334787568120",

            sync: true,
            handleAs: "json",
            preventCache: true,
           load: function(responseObj) {


            var seriesData=[1,2,3,4,5,6,7];
            chart1.addSeries("IP", dojo.map(responseObj.pieItems, function(p){
  return {
    y:    p[1], // value
    text: p[0],  // label
    tooltip:p[0] +": " + p[1]
  };
}));

      var anim_a = new dojox.charting.action2d.MoveSlice(chart1, "default");
      var anim_b = new dojox.charting.action2d.Highlight(chart1, "default");
      var anim_c = new dojox.charting.action2d.Tooltip(chart1, "default");
        chart1.render();

        var chartLegend = new dojox.charting.widget.Legend({
                chart: chart1,
                swatchSize: 12,
            },
            "chartLegend");

            },
            // error: function(error, args) { console.warn("error", error); }
            error: function(error, args) { 

                _this.xhrError = true;
                _this.chartStatusBar.innerHTML = chartErrorMsg(_this.id);
                console.log(error);
            }


        });
xhrget for url下的getURLFunctionthis.id引用html中的一个元素,该元素具有从html文件调用特定函数的id

该函数是getURL_IpDist,它返回XHRET用于获取数据的url,即/traffic analysis/get ip dist/format/json+sc.tour

sc是在函数尝试获取url之前需要设置的全局变量。这是在另一个外部javascript文件中设置的。
有人知道如何在设置变量之前延迟加载dojo或javascript吗?

据我所知,您发布的代码存在于一个单独的js文件中,并且使用标记将其包含在内

您是否尝试过将此代码包装到就绪函数中

require(["dojo/ready"], function(ready){
    ready(function(){

        // var chart1 = ...

    });
});

在浏览器解析整个dom之前,执行此操作不会执行代码。其中应包括设置全局变量的其他代码。

使用函数而不是使用变量。设置全局变量的组件实际上应该调用一个函数,而不是设置有问题的全局变量

然后,应用程序的其他部分可以使用dojo.connect连接到函数,因此无论何时调用它,dojo都将调用连接到函数的任何处理程序。例如:

global.setVar = function(value) {
  global.var = value;
}
...
dojo.connect(global, 'setVar', null, function() {
  alert("Global variable has been set to: "+global.var);
});

您可以使用dojo的subscribe/publish功能来获得类似的功能,甚至可以使用您自己的dojo.Deferred实例。您采用哪种方法来同步通信取决于应用程序的设计方式以及您的具体需求。

我想我忘了指定我正在制作一个自定义dojo小部件。所以包装只会给我一个错误。此外,我正在使用旧版本的dojo,因为这是我目前需要使用的。