2016-09-17 4 views
0

私はズームしてパンしたいと思っています。 私はこの例に従っ:http://bl.ocks.org/sgruhier/1d692762f8328a2c9957次のように私はtypescriptですでこれを実装していますv3の.attrが定義されていませんd3js

をd3.jsを使用して:

  this._svg = d3.select('body') 
       .append('svg') 
       .attr('style', 'max-width: 100%') 
       .attr('viewBox', this._viewbox_x + ' ' + this._viewbox_y + ' ' + this.responsemodel.width + ' ' + this.responsemodel.height) 
       .call(d3.behavior.zoom().on('zoom', this.zoom)) 
       .append('g') 

と私のズーム機能

zoom() { 
    this._svg.attr('transform', 'translate(' + (<d3.ZoomEvent>d3.event).translate + ')scale(' + (<d3.ZoomEvent>d3.event).scale + ')'); 
} 

これをrunnig場合は、 - 私を"未定義のプロパティ 'attr'を読み取ることができません。これは、_svgが未定義であることに由来します。

enter image description here

これは、それを解決するためにどのように、なぜ誰かが私に説明できますか?事前に

おかげで

+0

フィドルに完全なコードを置くことのチャンス:

あなたは、などのイベント関数にチャートを表すあなたのthisをバインドしようとしましたか? https://jsfiddle.net/ –

+0

はい。 https://jsfiddle.net/a1L0jLj3/ 問題はここには表示されません – methgaard

+0

すべてのTypeScriptをフィドルに入れる必要があります。コード入力ファイルの言語を変更するには、現在「JavaScript」と表示されている設定を選択し、これをTypeScriptに変更します –

答えて

1

私はあなたのthisあなたのイベントコールバックでは、windowオブジェクトを参照するので、それはだと思います。

this._svg = d3.select('body') 
     .append('svg') 
     .attr('style', 'max-width: 100%') 
     .attr('viewBox', this._viewbox_x + ' ' + this._viewbox_y + ' ' + this.responsemodel.width + ' ' + this.responsemodel.height) 
     .call(d3.behavior.zoom().on('zoom', this.zoom.bind(this))) 
     .append('g') 
+0

Fantastic!それはトリックでした! ありがとうございました! – methgaard

関連する問題