web-dev-qa-db-ja.com

Marionette.ViewでのUI要素の可用性

UI要素に関するBackbone.Marionetteの見解の背後にある決定を理解したいと思います。次のように、既存のDOM要素でMarionette.Viewをインスタンス化する場合:

_view = new Marionette.ItemView({
     el: "#element",
     ui : {
         whatever : "#whatever"
     }
});
_

これまでのところ、_view.$el_内のjqueryセレクターである_view.initialize_にアクセスできます。ただし、_view.ui.whatever_にアクセスしようとすると、セレクター、つまり実際の$("#whatever")jqueryセレクターではなく文字列 "#whatever"にしかアクセスできません。

これは、Marionette.View.bindUIElements()renderでのみ呼び出され、initializeの前では呼び出されないためです。

この振る舞いが論理的であると思うかどうか、そしてその理由を知りたいですか?

ビューを既存のelにアタッチする場合にのみ質問しています。ビューがテンプレートを使用して作成されている場合、バインディングがrender()にある理由を理解しています。

14
Filip Novotny

ビューを既存の要素にアタッチすることは例外です。通常のビューのライフサイクルにはrenderの呼び出しが含まれ、これを行わないと、UI要素をバインドすることはできません。

既存の要素にビューをアタッチする必要がある場合は、initializeメソッドでthis.bindUIElements()を呼び出すだけです。

26
Derick Bailey

Marionetteを使用しているときは、ui要素にアクセスする必要のあるコードをonShowメソッド内に配置します。このイベントは、DOMの準備が整い、要素を操作する準備ができた後に発生します。このメソッド内では、ui.whateverが文字列ではなく要素を指しているようになります。

1
Kalpers

JQuery要素にアクセスする必要があるため、この問題があると思います。

this.ui.whatever

「これ」はすでにビューインスタンスであるためです。参照: http://marionettejs.com/docs/v2.4.4/marionette.itemview.html#organizing-ui-elements

0
monikaja