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.
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);
});
}());
args
array you're passing intodcsMultitrack()
? Thecommonlogs
array you posted includes some strings that aren't in any of the aboveargs
arrays. \$\endgroup\$