17

シンプルな d3 プラグインを作成したいのですが、その方法に関する情報が見つかりません。

それは非常に単純である必要があります:

s.append('text').text("Some Text").editable();

に変換するだけです

s.append('text').text("Some Text").attr('data-editable', true);

どうすればいいですか?

4

3 に答える 3

31

ソースを掘り下げる必要がありましたが、最終的に取得しました。

(function() {
  d3.selection.prototype.editable = function() {
    return this.attr('data-editable', true);
  };
})();

ジェスビンはこちら

また、プラグインも適用したい場合.enter()は、 を割り当てる必要があることに注意してくださいd3.selection.enter.prototype

(私の場合のように)両方のシナリオでプラグインを利用したい場合:

(function() {
    d3.selection.prototype.editable = d3.selection.enter.prototype.editable = function() {
        return this.attr('data-editable', true);
      };
})();
于 2012-12-21T04:01:34.210 に答える
15

Mike Bostockは、再利用可能なグラフに向けてhttp://bost.ocks.org/mike/chart/を作成しました。

このパターンに従って、非常に単純なd3プラグインの例を作成しました。次のブロックを参照してください:http://bl.ocks.org/cpbotha/5073718(およびソースの要点:https ://gist.github.com/cpbotha/5073718 )。

Mike Bostockによると、再利用可能なチャートは「ゲッターセッターメソッドを使用したクロージャ」として実装する必要があります。上記の例では、まさにそれを実行しました。

@Wexの回答もこのパターンに従いますが、元の質問ではプロパティの要求が指定されていないため、クロージャーのアイデアが示されていません。

于 2013-03-02T23:56:08.620 に答える
4

私がそれを文書化したのを見た方法:

function editable() {
    d3.select(this).attr("data-editable", true);
}

に続く:

s.append('text').text("Some Text").call(editable);

また

d3.selectAll("text").each(editable);

私はジョージの解決策の方が好きですが。

于 2012-12-21T17:54:25.580 に答える