this questionの後に、英国の新聞の日々の感情分析を表すD3グラフのJs変数を作成するDRY方法を作成したいと思います。ここでグローバルな未定義変数に動的にアクセスする(D3の例)DRY
は私のスクリプトからいくつかのサンプルコードです:
var guardian,independent; // many more here
var gLine,gChart; // many more here
var iLine,iChart; // many more here
私はオブジェクト内の新聞固有の変数を格納しています:
var allObjects = { guardian : {line : gLine,chart : gChart},
independent : {line : iLine,chart : iChart}}// and so on for each newspaper
次のように私は関数を使用して変数を割り当てます。
function makeLine(name){return d3.svg.line().y(function(d) { return y(d[name]); }); }
// and so on for each newspaper attribute in AllObjects
いつも自分を繰り返しているのではなく、各オブジェクトind ividually:
正常に動作しますmakeLine('guardian'); makeLine('independent'); // etc
...、私はすべての新聞を反復できるようにし、すべての新聞のための単一の機能を持つオブジェクトを割り当てる、のようなものでしょう:
var allFunctions = {line: makeLine(),chart: makeChart()};
function make(type){
var myFunc = allFunctions.type;
for(var prop in allObjects){prop.type = myFunc(type);}
}
make(line)
はgLine
、iLine
、割り当てるなるようになど
問題がallObjects.guardian
内の変数が定義されていないとして、この方法が機能していないということです。
このようにリファクタリングする方法についてのご意見はありますか?
:-)実際にここでは痛みを感じないようにしようとしていますが、「完全」とは、問題を捉えたり、実行したりすることができることを意味します。特に、makeLineが何をすべきかを見るのは難しいd3があなたのコールバックを呼び出している 'd'オブジェクトによる間接指定を考えてください。もともと* more *詳細で質問を投稿するように提案したのは、イライラしてしまいました。あなたがする必要があるものを作ることができたら、私はあなたがそれをやるのを手助けすることができます、そして、私はちょうど上からそれを得ることができません。 –