2009-08-10 58 views
2

作为函数式编程的新手,我正在研究我的应用程序的javascript(仅使用jQuery),并且想知道jQuery的事件系统如何与它的函数式编程范式相关。功能性jQuery:自定义事件或函数?

我有一个函数setupAccountHeader很容易被要么喜欢

$(document).bind('setupAccountHeader', function() { 
    blah, blah, blah; 
}); 

OR

var setupAccountHeader = function() { 
    blah, blah, blah; 
}; 

然后,或是触发或在需要时称为文档绑定事件。

所以我有两个问题:

1)风格是首选功能的jQuery或者是这个纯粹的味道/个人风格问题?那么对于大画面架构的影响呢?

2)有没有用于功能样式的jQuery的好资源?我觉得这是约翰·雷西格的意图,但我无法从信息或指南的方式上找到什么意思。

回答

0
  • 在jQuery中绑定事件的官方方法是第一个版本,这种方式你有类似的绑定和解除绑定事件的方法。我认为这不是个人偏好,因为它有助于代码可读性,获得对代码的支持,并使用其他与jQuery相关并包含在jQuery中的函数,如防止默认事件冒泡。第一个问题的第二个例子在JavaScript中是正确的,但是这个样式在jQuery文档中没有使用。

更新

如果你绑定事件和使用normalized event system的好处,你将使用第一个版本定期(模糊,焦点,负载,调整大小,滚动,卸载,点击,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,更改,选择,提交,keydown,按键,keyup,错误)或您的自定义事件。

它们实际上并不相似。为了在第二个类似,你必须附上文件记录一些事件。尝试取消他们来获得这个想法。

// first version 
$(document).unbind('setupAccountHeader'); // will cancel the binding of some action 
// second version 
setupAccountHeader = null; // will just cancel a variable 

另一个版本仅仅是一个封闭,你可以在JavaScript中使用无处不在,在这种情况下使用。没有上下文,它没有任何特定的含义。

  • 我真的不明白第二个问题。也许你可以详细说明你的意思。我不是以英语为母语的人。
+4

有趣的,但并没有真正回答他的问题。其实,这甚至不是有趣的。 – 2009-08-10 15:40:40

+0

@Robert Harvey评论并没有多大帮助,是不是真的? – 2009-08-10 16:32:47

+0

我不会那么说。你改进了你的答案,不是吗? +1 – 2009-08-10 16:48:49

1

关于第二种风格的好处是,它将在调试器调用堆栈中显示其名称,而不是“匿名”,我发现它更有帮助。

你可以实现与jQuery的添加的事件机制沿以上(如Elzo说)有以下几点:

$(document).bind('setupAccountHeader', setupAccountHeader); 
+2

一个简单的解决方法是使用[命名函数表达式](http://yura.thinkweb2.com/named-function-expressions/#named-expr):'$(document).bind ('setupAccountHeader',function setupAccountHeader(){...});' – 2010-08-20 16:15:55

+0

+1 heh ...检查年份,但仍然有一个很好的...在这种情况下可能不重要,但如果事件处理程序是被多个对象(特别是大量的对象)重用,答案中的方法应该用于提高效率 - 但是如果它只是一个简单的处理程序,我喜欢这样的事实,即你可以得到最好的结果。 – 2010-09-30 17:57:01