Spine.js - 如何使用JavaScript从模型实例中取消绑定特定的事件处理程序?

时间:2013-01-22 11:21:15

标签: javascript spine.js

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

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

我查看Spine.js documentation但到目前为止没有运气。向unbind()函数添加参数没有任何效果 - 它只是忽略它们并且无论如何解除绑定。

2 个答案:

答案 0 :(得分:1)

最后,我们根据需要切换到更合适的框架Backbone.js。去年9月,Spine.js GitHub repository的维护工作似乎停滞不前,虽然Spine支持使用JavaScript,但它的文档很差。

如果任何人都可以提供原始问题的有效解决方案,我仍会接受它,以免造成其他任何偶然发现的问题。

答案 1 :(得分: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

VS

  unbind: ->
    @trigger('unbind')

我们在一些地方使用@ item.one并且发现它可以正常工作。

使用示例:

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

<强>更新 我们已经在Spine.js中为这个缺失的功能开发了一些解决方案。请参阅此问题主题https://github.com/spine/spine/issues/418