我正在尝试学习 Backbone js,并且无法理解使用下划线库提供的 bindAll/bind 函数和函数上提供的 jQuery 的事件绑定之间的区别。这是 Coffeescript 中的一个示例:
class Raffler.Views.Entry extends Backbone.View
template: JST['entries/entry']
tagName: 'li'
events:
'click': 'showEntry'
initialize: ->
@model.on('change',@render,this)
@model.on('highlight',@highlightWinner,this)
showEntry: ->
Backbone.history.navigate("entries/#{@model.get('id')}", true)
highlightWinner: ->
$('.winner').removeClass('highlight')
@$('.winner').addClass('highlight')
render: ->
$(@el).html(@template(entry: @model))
this
This is a snippet of code from Ryan Bate's RailsCasts' on Backbone.js
Seems to me that the same code can be written using the underscore bindAll and bind functions as follows:
class Raffler....
...
initialize: ->
_bindAll @, 'render', 'highlightWinner'
@model.bind 'change',@render
@model.bind 'highlight',@highlightWinner
...
问题:
- 这两个在功能上是等价的吗?
- 如果是,那么 jQuery 代码似乎更清晰、更明确。这只是个人喜好问题吗?
在此先感谢您的时间。
巴拉特