Javascript 未捕获的TypeError:对象[Object global]没有方法

Javascript 未捕获的TypeError:对象[Object global]没有方法,javascript,callback,this,google-visualization,self,Javascript,Callback,This,Google Visualization,Self,在渲染函数中加载google visualization,在回调函数中调用drawVisualization。我还将这个对象作为参数传递给这个函数。为此,我使用了一个匿名函数。在drawVisualization函数中,self等于该对象。但是我得到了一个错误:uncaughttypeerror:Object[objectglobal]没有方法“\u”。我做错了什么?我怎样才能纠正它?谢谢你的帮助。你需要把var self=this;在调用google.load之外 这是因为您作为回调参数传递给

在渲染函数中加载google visualization,在回调函数中调用drawVisualization。我还将这个对象作为参数传递给这个函数。为此,我使用了一个匿名函数。在drawVisualization函数中,self等于该对象。但是我得到了一个错误:uncaughttypeerror:Object[objectglobal]没有方法“\u”。我做错了什么?我怎样才能纠正它?谢谢你的帮助。

你需要把var self=this;在调用google.load之外

这是因为您作为回调参数传递给google.load的匿名函数将在不指定此上下文的情况下被调用,因此这将是全局窗口对象。 在渲染函数内部,您将拥有正确的this,并可以将其存储在变量self中,以便在回调函数中引用它

编辑: 此外,如果这样做,就不需要再将this上下文传递给_drawVisualization方法。完整示例:

   var resultItemView = Marionette.CompositeView.extend({
        render : function(){     
            var self = this;       
            google.load("visualization", "1", {packages:["table"], callback: function() {       

                     self._drawVisualization(self);
            }});
        },
您需要将var self=this;在调用google.load之外

这是因为您作为回调参数传递给google.load的匿名函数将在不指定此上下文的情况下被调用,因此这将是全局窗口对象。 在渲染函数内部,您将拥有正确的this,并可以将其存储在变量self中,以便在回调函数中引用它

编辑: 此外,如果这样做,就不需要再将this上下文传递给_drawVisualization方法。完整示例:

   var resultItemView = Marionette.CompositeView.extend({
        render : function(){     
            var self = this;       
            google.load("visualization", "1", {packages:["table"], callback: function() {       

                     self._drawVisualization(self);
            }});
        },
    var resultItemView = Marionette.CompositeView.extend({
        render : function(){   
            var self = this;          
            google.load("visualization", "1", {packages:["table"], callback: function() {       
                self._drawVisualization();
            }});
        },

       _drawVisualization : function(){ 
           var data = new google.visualization.DataTable();

            //Here i'm creating data table  ...

            var chart = new google.visualization.LineChart(this.$el.find("#graphDiv"));
            chart.draw(data, null, null);               

       },
       return resultItemView;
   });