gpt4 book ai didi

jquery - Backbone js bindAll/bind 与 jQuery on

转载 作者:行者123 更新时间:2023-12-01 01:26:34 25 4
gpt4 key购买 nike

我正在尝试学习 Backbone js,但无法理解使用下划线库提供的 bindAll/bind 函数和 jQuery 函数提供的事件绑定(bind)之间的区别。这是 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
...

问题:

  1. 这两者在功能上等效吗?
  2. 如果是,那么 jQuery 代码看起来更清晰、更明确。这只是个人喜好问题吗?

预先感谢您的宝贵时间。

巴拉特

最佳答案

jQuery 的“on”与 Backbone 的“bind/bindAll”的用途完全不同。 jQuery“on”的目的是在事件发生时调用函数。 Underscore的bind或bindAll的目的是将函数绑定(bind)到对象,这意味着每当调用该函数时,this的值将是您在调用bind时传递的对象。 Underscore 的bindAll 与bind 执行完全相同的操作,只是同时具有多个函数。

您会发现,在使用 Backbone 构建时,它们会一起使用。假设您设置了一个模型,其中包含一个函数,您可以在内部调用该函数来修改模型。如果您使用 jQuery 或 Backbone 的“on”函数将该函数绑定(bind)到事件,则当它触发事件时,this 将是触发事件的 DOM 元素,意味着对 this< 的任何引用该函数中的/em> 将不再起作用,因为 this 不再是一个模型,它是一个 dom 元素。但是,如果我们在模型的构造函数中调用 _.bind(this,callback),它将确保 this 始终是模型。

Backbone 还实现了一个“on”函数,该函数与 jQuery 的“on”更相似,但用于 Backbone 事件。可以阅读on the backbone docs

关于jquery - Backbone js bindAll/bind 与 jQuery on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com