未捕获的类型错误: 对象 [对象全局] 没有方法
Uncaught TypeError: Object [object global] has no method
var resultItemView = Marionette.CompositeView.extend({
render : function(){
google.load("visualization", "1", {packages:["table"], callback: function() {
var self = this;
this._drawVisualization(self);
}});
},
_drawVisualization : function(self){
var data = new google.visualization.DataTable();
//Here i'm creating data table ...
var chart = new google.visualization.LineChart(self.$el.find("#graphDiv"));
chart.draw(data, null, null);
},
return resultItemView;
});
在渲染函数中,正在加载谷歌可视化,并且在回调函数中调用了draw可视化。此外,我将"this"对象作为参数传递给此函数。为此,我使用了一个匿名函数。在drawVisual函数中,self等于这个"this"对象。但是我收到此错误:"未捕获的类型错误:对象[对象全局]没有方法'_drawVisualization'"。我做错了什么?我该如何纠正它?感谢您的帮助。
您需要
将var self = this;
放在调用之外google.load
。
var resultItemView = Marionette.CompositeView.extend({
render : function(){
var self = this;
google.load("visualization", "1", {packages:["table"], callback: function() {
self._drawVisualization(self);
}});
},
这是因为您作为回调参数传递给google.load
的匿名函数将在不指定this
上下文的情况下被调用 - 因此这将是全局(窗口(对象。在 render
函数内部,您将拥有正确的this
,并且可以将其存储在变量self
中,以便在回调函数中引用它。
编辑:此外,如果执行此操作,则无需再将this
上下文传递给 _drawVisualization
方法。完整示例:
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;
});
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 全局对象是属于哪个类的对象
- javascript无法重新定义函数内部的全局对象
- cordova:例外:财产'requestFileSystem'的[对象全局]不是函数
- Javascript,从静态函数中打印全局对象
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 向调用全局javascript函数的对象添加处理程序
- jQuery:如何使用文字对象方法中的方法来获取全局变量
- 警告 - 全局 THIS 对象的危险使用
- 在全局声音管理器对象上完成
- 将对象传递给指令不允许全局变量
- 在 Javascript 中创建全局变量时是否需要指定对象类型
- 将对象插入到全局数组
- Javascript外部对象全局
- 对象 [对象全局] 没有方法“附加事件”
- 如何使javascript对象全局可用
- 在 AngularJS 中使对象全局化
- 未捕获的类型错误: 对象 [对象全局] 没有方法
- Cheerio:SyntaxError:属性选择器格式不正确:对象全局
- 在复杂的AngularJS应用中使对象全局可访问和可操作的最好方法