2013-07-29 5 views
1
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; 
    }); 

렌더링 기능에서 Google 시각화가로드되고 콜백 함수 drawVisualization이 호출됩니다. 또한 매개 변수로 "이"개체를이 함수에 전달하고 있습니다. 이렇게하려면 익명의 함수를 사용했습니다. drawVisualization 함수에서 self는이 "this"객체와 같습니다. 하지만이 오류가 발생합니다 : "잡히지 TypeError : 개체 [개체 전역] 메서드가 없습니다 '_drawVisualization'". 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떻게 해결할 수 있습니까? 도와 주셔서 감사합니다.잡히지 않은 TypeError : Object [object global] 메서드가 없습니다.

답변

6

google.load으로 전화하지 않고 var self = this;을 입력해야합니다. 즉 글로벌 (창) 개체 수 있도록 - 당신이 google.load에 콜백 매개 변수로 전달하는 익명 함수는 this 컨텍스트를 지정하지 않고 호출 할 수 있기 때문에

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

        self._drawVisualization(self); 
      }}); 
     }, 

이다. render 함수 안에 올바른 이 있고 변수를 self에 저장하여 콜백 함수에서 참조 할 수 있습니다.

편집 :이 작업을 수행 할 경우 또한, 당신은 더 이상 _drawVisualization 방법에 this 컨텍스트를 통과 할 필요가 없습니다. 완료 예 :

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; 
    }); 
관련 문제