6

unbind()从模型类中取消绑定特定事件处理程序非常容易,但似乎从模型实例取消绑定事件处理程序的唯一方法是使用(不带参数)取消绑定到该实例的所有事件处理程序。

模型实例是否有等效于模型类的unbind([eventName, function])函数,或者是否有另一种更好的方法来取消绑定特定处理程序而不绑定它们?

我浏览了Spine.js 文档,但到目前为止还没有运气。向unbind()函数添加参数没有任何效果 - 它只是忽略它们并取消绑定。

4

2 回答 2

1

最后,我们切换到更适合我们需求的框架Backbone.jsSpine.js GitHub 存储库的维护似乎在去年 9 月停止了,尽管 Spine 支持与 JavaScript 一起使用,但它的文档非常差。

如果有人可以为原始问题提供可行的解决方案,我仍然会接受它,以使其他偶然发现此问题的人受益。

于 2013-01-30T11:44:13.653 回答
0

我不认为这特别回答了你的问题,但可能会让你明白你的目标。

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

对比

  unbind: ->
    @trigger('unbind')

我们在几个地方使用了@item.one,发现它可以正常工作。

示例使用:

@item.one 'awaitingPermit', (item) =>
  @navigate('/document', item.id, 'show')

更新: 我们已经为 Spine.js 中缺少的这个功能提供了一些解决方案。看到这个问题线程https://github.com/spine/spine/issues/418

于 2013-01-29T22:55:56.520 回答