2011-07-13 7 views
1

同じクラス(メソッド)からメソッドを起動するために新しいChart()を呼び出す必要があるのはなぜですか?これを行う正しい方法ですか?ありがとう。Javascript:プロトタイプを使用しているときにオブジェクトにメソッドがありません

function Chart(location, startDateString, endDateString) { 

    this.location = location; 
    this.startDateString = startDateString; 
    this.endDateString = endDateString; 
} 


Chart.prototype.fnDrawStaticChart = function(chartUrl, chartData) { 

    $.get(chartUrl, function() {      
     $('#'+chartData.wrapSpecId).attr('src', chartUrl);        
    });  
} 

Chart.prototype.fnDraw = function(fnStaticChartJSON, fnStaticChartImage) {   

    $.getJSON(fnStaticChartJSON, function(data) { 

     if (data.chartData.length > 0) {  

      $('#chartDiv').append($('#template').jqote(data, '@'));  

      $.each(data.chartData, function(index, chartData) { 

       var pkgLineId = chartData.wrapSpec2.pkgLineId.pkgLineId;    
       var wrapSpecId = chartData.wrapSpecId; 
       var startDate = data.startDate; 
       var endDate = data.endDate; 

       var chartUrl = fnStaticChartImage({ 
        pkg_line_id: pkgLineId, 
        wrap_spec_id: wrapSpecId, 
        start_date: startDate, 
        end_date: endDate 
       }); 

       this.fnDrawStaticChart(chartUrl, chartData); //can't do this. 
       new Chart().fnDrawStaticChart(chartUrl, chartData); CAN do this. 



      });  
    }); 
} 

答えて

2

これは簡単なスコープの問題です。 は$ .eachに渡した関数を指します。古い参照を別の変数に保存する必要があります。

Chart.prototype.fnDraw = function(fnStaticChartJSON, fnStaticChartImage) {   
    var self = this; 
    $.getJSON(fnStaticChartJSON, function(data) { 

     if (data.chartData.length > 0) {  

      $('#chartDiv').append($('#template').jqote(data, '@'));  

      $.each(data.chartData, function(index, chartData) { 

       var pkgLineId = chartData.wrapSpec2.pkgLineId.pkgLineId;    
       var wrapSpecId = chartData.wrapSpecId; 
       var startDate = data.startDate; 
       var endDate = data.endDate; 

       var chartUrl = fnStaticChartImage({ 
        pkg_line_id: pkgLineId, 
        wrap_spec_id: wrapSpecId, 
        start_date: startDate, 
        end_date: endDate 
       }); 

       self.fnDrawStaticChart(chartUrl, chartData); 
       new Chart().fnDrawStaticChart(chartUrl, chartData); 
      });  
    }); 
} 
+0

Ok cool。だから私はちょうどthis.fnDrawStaticChart()のように呼び出すことができないのですか? "this"は$ .getJSONの何かを参照していますか? –

+0

いいえ、* this *は常に、現在の関数のスコープを参照します。関数の場合は、$ .each()に渡した関数(index、chartData)を参照します。 – Daff

関連する問題