0

バックボーン (マリオネット) と jQuery カスタム DOM イベントに問題があります。

changed_currencyドキュメントでイベントが発生したときに要素の html コンテンツを更新するカスタム プラグインがあります。

$(document).on
  changed_currency: ->
    # omitted code
    $(@).html("some html")
, '.currency-change'

ここには派手なものはありません。Backbone を使用しないページで機能します。ただし、バックボーン ビューでは、このコードはまったく機能しません (イベントがキャッチされません)。私の質問は、バックボーン ビュー内からカスタム イベントを起動できますか?

バックボーン コード:

#omitted code
ui: 
   currency_change: '.currency_change'

onRender: () =>
  #omitted code
  @ui.currency_change.trigger('changed_currency')
4

1 に答える 1

2

onRender関数は、関数の Marionette 実装の最後に呼び出されるため、これは機能しませんrender。このrender関数は、ビューの HTML を DOM の一部ではない要素にレンダリングします。

documentぶら下がっているイベントハンドラーがトリガーしたイベントをキャプチャするのは、実際にDOMに挿入するまではありません。

マリオネットの領域の概念を利用している場合は、trigger呼び出しをonShow関数に移動することで問題を解決できます。triggerそれ以外の場合は、実際にview.elDOMに挿入する場所の後に呼び出しを移動する必要があります。

// In view
onShow : function () {
  this.ui.currency_change.trigger('changed_currency');
}

// View instantiation code
var view = new SomeView();
App.someRegion.show(view);
于 2012-11-30T17:58:06.367 に答える