Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

How can I re-factor the code to remove duplication and create a common method ?

(function(){

    $("#a", "#main").bind("mouseover", function(){
              var id1 = $("#one").text(),
                  args = ["DCSext.common1","common1","DCSext.common2","DCSext.title","one", "DCSext.ti", id1];

              dcsMultitrack.apply(this, args);
     });

    $("#b", "#cool").bind("click", function(){
           var id2 = $("#two").text(),
               args = ["DCSext.common1","common1","DCSext.common2","DCSext.title", "two", "DCSext.some", id2];
               dcsMultitrack.apply(this, args);
    });

    $("body").delegate("a", "click", function(){
         var id3 = $("#three").text(),
               args = ["DCSext.common1","common1","DCSext.common2","DCSext.new", "what", "DCSext.where", "us"];
               dcsMultitrack.apply(this, args);
    });

    }());

I have some common logs which are almost repeated in all callbacks. I can use a variable like

var commonlogs = ["DCSext.common1","common1","DCSext.common2","common2", "DCSext.common3", "common3" ];

i can use commonlogs.push("DCSext.title","one","DCSext.ti", "two"). But not finding a proper way to re-factoring repeating the DCSext stuff again and again since its very granular level .

Thanks for any advice or suggestions.

share|improve this question
    
@paul Can you clarify your problem? I don't understand what you mean by "common logs". Are you referring to the args array you're passing into dcsMultitrack()? The commonlogs array you posted includes some strings that aren't in any of the above args arrays. –  seand Jan 17 '12 at 2:05
    
@seand purpose of including commonlogs variable is to move out repeated strings from the existing arrays in callback function .If you see my top code mostly ["DCSext.common1","common1","DCSext.common2"] been repeated almost in all callback function .So I can extract into an variable and can just do commonlogs.push(extra strings) but i do not think it i san elegent solution .So looking for some other advice. Thanks –  paul Feb 7 '12 at 6:43

1 Answer 1

There is not much you can do, the only thing I would suggest is to use concat instead of push, this way you can keep re-using commonLogs, and maybe have 1 commonLogs per group.

So

  var commonLogs = [ [] ];
  commonLogs[1]  = ["DCSext.common1","common1"];
  commonLogs[2]  = commonLogs[1].concat( ["DCSext.common2","common2"] );
  commonLogs[3]  = commonLogs[2].concat( ["DCSext.common3","common3"] );

Then you can

(function(){

  $("#a", "#main").bind("mouseover", function(){
          var id1 = $("#one").text(),
              args = commonLogs[2].concat( ["DCSext.title","one", "DCSext.ti", id1] );
          dcsMultitrack.apply(this, args);
  });

  $("#b", "#cool").bind("click", function(){
       var id2 = $("#two").text(),
           args = commonLogs[2].concat( ["DCSext.title", "two", "DCSext.some", id2] );
       dcsMultitrack.apply(this, args);
  });

  $("body").delegate("a", "click", function(){
     var args = commonLogs[2].concat( ["DCSext.new", "what", "DCSext.where", "us"] );
     dcsMultitrack.apply(this, args);
  });

}());
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.