如何使用JavaScript从模型实例中解除特定事件处理程序的绑定?
从模型类中解除特定事件处理程序的绑定非常容易,但从模型实例中解除事件处理程序绑定的唯一方法似乎是使用如何使用JavaScript从模型实例中解除特定事件处理程序的绑定?,javascript,spine.js,Javascript,Spine.js,从模型类中解除特定事件处理程序的绑定非常容易,但从模型实例中解除事件处理程序绑定的唯一方法似乎是使用unbind()(不带参数)解除绑定附加到该实例的所有事件处理程序 对于模型实例,是否有与模型类“解除绑定([eventName,function])函数等效的方法,或者是否有其他更好的方法来解除特定处理程序的绑定,而不必全部解除绑定 我已经查过了,但到目前为止运气不好。将参数添加到unbind()函数没有任何效果-它只是忽略它们并取消所有绑定。我认为这并不能明确回答您的问题,但可能会让您了解您的
unbind()
(不带参数)解除绑定附加到该实例的所有事件处理程序
对于模型实例,是否有与模型类“解除绑定([eventName,function])
函数等效的方法,或者是否有其他更好的方法来解除特定处理程序的绑定,而不必全部解除绑定
我已经查过了,但到目前为止运气不好。将参数添加到
unbind()
函数没有任何效果-它只是忽略它们并取消所有绑定。我认为这并不能明确回答您的问题,但可能会让您了解您的目的
Spine有一个未记录的.one()事件
来源:
one: (ev, callback) ->
@bind ev, ->
@unbind(ev, arguments.callee)
callback.apply(this, arguments)
所以它基本上是在幕后为你解除绑定,但它没有使用一个模型解除绑定,它实际上只是触发“解除绑定”
unbind: (ev, callback) ->
unless ev
@_callbacks = {}
return this
list = @_callbacks?[ev]
return this unless list
unless callback
delete @_callbacks[ev]
return this
for cb, i in list when cb is callback
list = list.slice()
list.splice(i, 1)
@_callbacks[ev] = list
break
this
vs
我们在一些地方使用@item.one,并发现它可以正常工作
示例用法:
@item.one 'awaitingPermit', (item) =>
@navigate('/document', item.id, 'show')
更新:
我们已经为Spine.js中缺少的这一功能开发了一些解决方案。参见本期主题最后,我们切换到了一个更适合我们需要的框架。上的维护似乎在去年9月停止了,尽管Spine支持使用JavaScript,但它的文档非常糟糕
如果有人能为最初的问题提供一个有效的解决方案,我仍然会接受它,以利于其他偶然发现这个问题的人。从未对脊椎进行过处理,可能是一个bug。您能发布一些代码来确保吗?这和我们想要的不太一样,因为每个处理程序在解除绑定之前都可以被多次调用,而且我们没有使用CoffeeScript。
@item.one 'awaitingPermit', (item) =>
@navigate('/document', item.id, 'show')