6

モデルクラスから特定のイベントハンドラーのバインドを解除するのは非常に簡単ですが、モデルのインスタンスからイベントハンドラーのバインドを解除する唯一の方法は、unbind()(引数をとらない)を使用してそのインスタンスにアタッチされたすべてのイベントハンドラーのバインドを解除することです。

モデルインスタンスのModelクラスの関数に相当するものはありunbind([eventName, function])ますか、それともすべてのバインドを解除せずに特定のハンドラーのバインドを解除する別のより良い方法がありますか?

Spine.jsのドキュメントを調べましたが、今のところ運がありません。関数に引数を追加しunbind()ても効果はありません。引数を無視して、とにかくすべてのバインドを解除します。

4

2 に答える 2

1

最終的に、私たちのニーズにより適したフレームワークであるBackbone.jsに切り替えました。Spine.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 に答える