Backbone.js事件处理程序命名的最佳实践

时间:2012-08-16 15:05:49

标签: javascript events backbone.js naming-conventions

假设我在视图中有一个函数,当某种状态发生变化时会触发该函数。 什么是最好的名字,为什么?

  • stateChange
  • stateChanged
  • onStateChange
  • onStateChanged

6 个答案:

答案 0 :(得分:14)

我个人倾向于使用 onEventName 名称来保留DOM事件处理程序的本机命名约定。

myElement.onclick = function() { /* ... */ }事件的click类似。

因此,对于 myEvent ,我使用名为 onMyEvent 的处理程序。

如果我有 stateChange 事件,那么我将使用 onStateChange 处理程序。

但实际上,这个问题对每个开发团队和团队/公司内部的代码式约定更具体。

因此,此类问题的主要目标是在所有部分保持代码样式相同,以确保可读性。

因此,如果您在团队中工作,只需保持团队代码编写惯例的粘性,如果您单独使用现有代码,请尝试保持其代码样式(确定该样式是否显然不丑)。

更新:了解。

什么是事件?粗略地说,这是在程序外部或内部启动的操作,换句话说,系统中发生了某些事情,例如:某些状态更改(键盘状态,鼠标,I / O设备等)无关紧要(用户点击鼠标或某些程序将鼠标点击信号发送到系统)。

假设订阅浏览器窗口以获取有关某些事件的通知以及操作系统尽快将其发送给它,我们将假设在发生某些事件的同时。因此,如果用户在浏览器窗口处于活动状态并且文档具有焦点时单击鼠标,则浏览器会记录以触发click事件。在这里我们的onclick处理程序开始调用。换句话说,系统告诉我们现在发生某种状态的更改。我们正在处理这个更改,而不是处理一个事实,说我们状态已经改变。

让我们假设我们的处理程序命名为onClicked由于处理程序的名称以过去时态说出,我们可以得到一个合理的问题:“点击时,它发生了多长时间?有多少?点击它的时间?嗯,也许现在处理这个动作(或行动?)已经太晚了......“。所以这个名字告诉我们过去发生的事情。

相比之下,当我们的处理程序命名为onClick 时,显然click事件被解雇并触发一次,我们立即得到通知。我们将处理 点击事件 - 告诉我们鼠标状态现在发生变化的信息(鼠标点击,但点击事件。)

因此,当我们需要检查某个状态是否已被更改时,过去时的名称更适合于这些情况。例如。如果变量存储state = 1,我们可以调用函数 isStateChanged(); ,它会将state变量中的值与当前时刻的实际值进行比较。在这里,过去时是命名的好选择。

答案 1 :(得分:8)

onStateChanged因为只要某种状态发生变化,该函数就会触发。

答案 2 :(得分:6)

我用Google搜索了几个名字,并注明了返回的结果数量。您可以获得一些关于事件处理程序最常见表单相对受欢迎程度的指示:

stateChanged 168k
stateChange 81k [1] 
handleStateChange 61k
onStateChange 59k 
onStateChanged 12k 
beforeStateChange 2k

[1]结果显示stateChange主要用作事件的名称,而不是处理程序。

使用不同的事件类型为onStateChange表单提供了更强烈的建议:

change [2]
onChange 2000k
onChanged 85k
handleChange 36k
beforeChange 27k
afterChange 22k

click [2]
onClick 48000k
onClicked 58k
handleClick 50k
beforeClick 8k [3]

onDrag 100k
handleDrag 36k
beforeDrag 32k
afterDrag 4k
onDragged 5k

[2]与编程无关的结果太多。

[3]显然,某些Microsoft API可以预测用户何时点击。

答案 3 :(得分:3)

我的赌注是stateChanged到期日:

  • stateChange看起来像一个订单,看起来它收到了一个带有新状态的参数。
  • onStateChangeonStateChanged是存储处理程序的更多键,而不是处理程序本身的名称。

IMHO

答案 4 :(得分:1)

我通常会选择2因素事件名称。随着应用程序的大小增加,您可能有多个状态发生变化的对象,或者可能有一个控制器可以为多个对象广播更改事件,因此希望能够在代码和头脑中区分它们:

Object1:event
Object2:event

至于哪个事件名称,我认为这取决于个人偏好和一致性。

答案 5 :(得分:0)

我认为应该根据行动发生时的实际时刻做出改变。对于我onStateChange意味着它正在改变,我可以在改变之前得到技术上的通知。 OnStateChanged表示已经发生的操作,并在结束时通知我。

因此,在onStateChange和onStateChanged之间存在重要的意图差异。 第一个说“为这个改变做好准备”,而第二个说“它已经发生了”。

编辑:我被意图带走了,并没有意识到命名本身。 为何选择on前缀?这是为处理程序保留的。处理程序将执行与该事件相关的操作。 所以我会选择stateChange和stateChanged。