0

イベントが自動的に読み込まれません。render()メソッドの最後にdelegateEvents()を追加すると、しばらくは機能しました。デリゲートイベントを使用したくないのですが、デリゲートイベントを使用してもイベントが読み込まれません。

DOMはその時点では不明であるため、イベントはバインドされていないと思いますが、それを確認(デバッグ)するにはどうすればよいですか?

意見:

class EditGroup extends BaseView
    initialize: ->
        @render()

    render: ->
        html = _.template tpl, @model.toJSON()
        @$el.html html

        for own key, options of FormConfig[@model.type]             
            options.key = key
            options.value = @model.get key
            input = new Input options
            input.on 'valuechanged', (key, value) => @model.set key, value

            @$('section.'+key).html input.$el

        @delegateEvents() # doesn't work

        @

DOM:

h2 Edit Group

section.title
section.type
section.members

button.save.btn.btn-primary(onclick="return false") Save changes

タイプとメンバーのセクションには、先行入力があり、レンダリングされたものを選択します(バックボーンビュー)。1つはdelegateEventsなしで機能し、もう1つはで機能します。親ビュー(上に表示)のイベントはまったく機能しません。forループを削除しても違いはありません。

4

1 に答える 1

0

わかりました、解決しましたが、仕組みがわかりません。

私は、すべてのビューを登録し、親ビューを表示する「ビューマネージャー」を使用しています (読み取り: HTML を DOM にアタッチします)。ビュー マネージャーの show 関数は、新しいルートが起動されたときにトリガーされますが、ルートは "route:edit" として、もう 1 回は "route" として 2 回起動されました。router.on "all"、(eventName) -> などでそれらをキャッチします。イベントは html にバインドされていると思いますが、html はバインドなしで 2 番目のルーター イベントによってオーバーライドされ、DOM にアタッチされます。なぜルートが 2 回発射されるのかという疑問が残ります。

于 2013-01-31T14:53:32.427 に答える