不同事件方法的代码重用
Code reuse with different event methods
我的项目的两个不同函数中有两段类似的代码我想摆脱重复的代码。我该怎么做?
1:
getArray("my-hand").forEach(function(elem){
$(elem).mouseover(function(){
$(this).css({'top': '1em'});
});
$(elem).mouseout(function(){
$(this).css({'top': '0em'});
});
$(elem).click(function(){
var cardNode = $(this).get(0);
//some jquery animation
play(cardNode,time);
});
})
和第二块
2:
getArray("my-hand").forEach(function(elem){
$(elem).mouseover(function(){
$(this).css({'top': '1em'});
});
$(elem).mouseout(function(){
$(this).css({'top': '0em'});
});
$(elem).click(function(){
var cardNode = $(this).get(0);
//a function with another jquery animation
validateCardAndAddForCollection(checkNumber,cardNode,time);
});
})
一种方法是将其放入函数中,并将一个回调作为参数传递给该函数,该回调将执行所需的代码:
function handleCards (cb) {
getArray("my-hand").forEach(function(elem){
$(elem).mouseover(function(){
$(this).css({'top': '1em'});
});
$(elem).mouseout(function(){
$(this).css({'top': '0em'});
});
$(elem).click(function(){
var cardNode = $(this).get(0);
//some jquery animation
cb(cardNode);
});
});
}
handleCards(function (cardNode) {
play(cardNode, time);
});
handleCards(function (cardNode) {
validateCardAndAddForCollection(checkNumber,cardNode,time);
});
我假设主要的可重用逻辑是设置事件。在这种情况下,我会使用setupHandEvents
方法来完成所有无聊的事情,但会给它传递一个不同的方法来表示它的click
处理程序。
function setupHandEvents (hand, handler){
getArray(hand).forEach(function (elem) {
$(elem).mouseover(function () {
$(this).css({'top': '1em'});
});
$(elem).mouseout(function () {
$(this).css({'top': '0em'});
});
$(elem).click(function (){
handler($(this).get(0));
});
});
}
setupHandEvents('my-hand', function (cardNode) {
play(cardNode, time);
});
setupHandEvents('my-hand', function (cardNode) {
validateCardAndAddForCollection(checkNumber, cardNode, time);
});
更新
你已经评论了另一个答案,你有这些重复使用的代码包在另一个函数中(这个函数从其他地方传递变量checkNumber
和time
。以下是你如何将我的setupHandEvents
方法与你在评论中发布的代码一起使用:
var func1 = function(time){
setupHandEvents('my-hand', function (cardNode) {
play(cardNode, time);
});
}
var func2 = function(checkNumber, time){
setupHandEvents('my-hand', function (cardNode) {
validateCardAndAddForCollection(checkNumber, cardNode, time);
});
}
相关文章:
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 从window.onbeforeunload调用方法背后的代码
- 是否有一种方法可以使用公共代码库在Java和JavaScript中进行输入验证
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 我需要把createUser代码放在流星方法中吗
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 如何在jQuery.CSS()方法中为所有浏览器编写CSS代码
- 角度方法返回未绘制的代码
- 使用ScriptManager.RegisterStartupScript从代码隐藏调用javascript方法
- 崇高的jslint:任何忽略特定代码段的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- 在我的代码中管理大量硬编码数据的最佳方法
- 需要减少用于获取日期格式的javascript方法代码
- 通过找到一种删除许多 if 语句的方法来简化代码
- 使用each()方法来动画化代码类型
- 我可以替换“;获取“;方法用“;POST”;代码库中的任何位置
- AngularJS控制器之间共享代码/方法/功能
- 如何确定字符串是否为代码方法
- 使用razor在javascript中调用带有参数的c#代码方法
- 如何从javascript调用服务器端类代码方法