2017-12-29 18 views
1

スライスの引き込みは、すべてまたはなしに簡単に切り替えることができます。スライスを引き抜く方法を探していますが、それ以上スライスを引っ張らないようにしています。スライスを引き抜く方法はありますが、スライスの変更をさらに引き出すことはできません。

例:デフォルトのを防ぐclickSlice上のリスナーを追加http://jsfiddle.net/4zg3hmn8/1/

は、伝播を停止、またはfalseを返しますが動作しません。これらの下位イベントがトリガされる前にclickSliceイベントが起動されます。 clickSliceリスナー

http://jsfiddle.net/4zg3hmn8/2/

より掘削がトリガされたイベントは、次に下位のイベント動作を説明clickSliceメソッドを呼び出すmouseupであることを示しています。残念ながら、mouseupにリスナーを追加しても、チャートには何の影響もありませんでした。 mouseupリスナー

http://jsfiddle.net/4zg3hmn8/3/

イベントはプライベートjavascriptオブジェクトではないDOM要素に追加され

ので、私は(それはクロームのdevのツールで簡単に取り外し可能です)Javascriptを経由して削除する方法を考え出すことができませんでした。

どのように解決するのですか?

答えて

1

AmCharts.makeChartが呼び出されると、渡されたconfigオブジェクトがベースのデフォルトチャートオブジェクトを拡張するために使用されます。この操作、我々はベースオブジェクトで使用addEventListenerメソッドのコピーを渡し、効果的に一部を除去し、それを上書きすることができ、我々は望んでいない:

... 
"startDuration": 0, 
"valueField": "litres", 
"titleField": "country", 
"pulledField": "isPulled", 
"balloon": { 
    "fixedPosition": true 
}, 
"addEventListeners": function(a, b) { 
    var c = this 
    a.mouseover(function(a) { 
     c.rollOverSlice(b, !0, a) 
    }).mouseout(function(a) { 
     c.rollOutSlice(b, a) 
    }).touchend(function(a) { 
     c.rollOverSlice(b, a) 
    }).mouseup(function(a) { 
     alert('ah ah ah... didn\'t say the magic word!') 
    }).contextmenu(function(a) { 
     c.handleRightClick(b, a) 
    }) 
}, 
... 

mouseupリスナーに:http://jsfiddle.net/4zg3hmn8/4/

+0

内部メソッドをオーバーライドするだけでダウンランダム未定義の動作/破損を求めています内部の 'addEventListeners'メソッドで何か他のことが起こることが予想されるように内部構造が変更された場合は、特に注意してください。あなたの仕事をより安全に達成するための私の例を見てください。 – xorspark

1

内部文書化されていないのオーバーライドメソッドやイベントは未定義の動作につながる可能性があるため、推奨されません。デフォルトのスライスだけを引き出したい場合は、clickSliceイベントを使用してclickSliceに再度コールし、ユーザーの最初のクリックを取り消すことができます。あなたはしかし、手動clickSlice呼び出しを無視するイベントを伝えるためにカスタムプロパティを設定する必要があります:

"listeners": [{ 
    event: 'clickSlice', 
    method: function(e) { 
     if (!e.dataItem.ignore) { 
     e.dataItem.ignore = true; //prevent infinite loop 
     e.chart.clickSlice(e.dataItem.index); //call clickSlice to cancel out the user's click 
     e.dataItem.ignore = false; //reset the ignore flag 
     } 
    }, 
    }], 

更新フィドル:http://jsfiddle.net/4zg3hmn8/5/

+0

素晴らしい点。将来の破損を避けるための余分なオーバーヘッドは価値のある取引です。 – Brad

関連する問題