Ozg*_*Ozg 1 javascript callback this self google-visualization
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;
});
Run Code Online (Sandbox Code Playgroud)
在渲染功能正在加载谷歌可视化,并在回调函数中调用drawVisualization.此外,我将"this"对象作为参数传递给此函数.为此,我使用了匿名函数.在drawVisualization函数中,self等于这个"this"对象.但我得到这个错误:"未捕获TypeError:对象[对象全局]没有方法'_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);
}});
},
Run Code Online (Sandbox Code Playgroud)
这是因为您作为回调参数传递的匿名函数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;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5643 次 |
| 最近记录: |