1

Backbone.Marionette.Layout2 つの異なるリージョンを含むを拡張したプロジェクトをセットアップしました。このレイアウトは、アプリケーション全体でコンポーネントとして使用できます。具体的には、以下のように地域を設定しています。

regions : {
    masterRegion : { selector: '[data-region=master]' },    
    slaveRegion: { selector: '[data-region=slave]' }
},

特に、data-region興味のあるビューを挿入するためにセレクターを使用しています。

このようなレイアウトがツリー構造で使用されると、getEl関数が間違った領域を指定してビューを挿入するため、ビューが複製されます。明らかにそれは私のせいであり、Marionette(v1.1.0)ドキュメント内に次のように書かれています。

parentEl がある場合は、getEl 関数をオーバーライドして、リージョンの最初の使用時にセレクターが確実に見つかるようにオーバーライドする必要があります。領域の el をオブジェクト リテラルの parentEl.find(selector) に割り当てて領域を構築しようとすると、要素が既に DOM に存在することが保証されず、問題が発生します。

は次のようにgetEl定義されます

getEl: function(selector){
    return Marionette.$(selector);
}

それで、私の質問は次のとおりです。これは何を意味するのでしょうか?このメソッドをオーバーライドするにはどうすればよいですか? そのようなオーバーライドを実行する正しい場所はどこですか?

それが明確であることを願っています。

4

1 に答える 1

1

これについての私の理解は次のとおりです。

  • 以下のポイントは、レイアウトが別の要素に含まれている場合 (「parentEl がある場合」) に適用されます。
  • リージョンを初めて使用するとき、Marionette は、セレクター文字列に従って、入力する適切な DOM 要素を選択する必要があります (「リージョンの最初の使用時にセレクターが見つかることを確認してください」)。
  • 必要なDOM要素がまだDOMにあるとは限らないため、単純にparentElでセレクターを探すことはできません(「領域のelをオブジェクトリテラルのparentEl.find(selector)に割り当てようとすると」)。 (「要素がすでにDOMにあるとは限りません」)

つまり、リージョンを初めて使用するとき (showメソッドの呼び出しなど)、Marionette はリージョン インスタンスを作成し、それを正しい DOM 要素 (selector属性で指定) に関連付ける必要があります。

ただし、Marionette が親要素を含む DOM 要素を探す前に、必要なすべての DOM 要素 (最も重要なのは探している要素) が読み込まれていることを確認する必要があります。

それはあなたにとってもっと理にかなっていますか?

flexaddicted のコメントに基づいて編集します。

これを達成する正しい方法を教えてください。以下のメソッドをオーバーライドする方法はありますか?

このメソッドをオーバーライドする必要はないと思います。コメントは、リージョンの構築時に DOM 要素が直接代入ではなくそのようにフェッチされる理由を示していますが、ツリー構造でも適切に機能するはずです (親を適切に決定できるため)。

問題はリージョンセレクターにあると思います.「ジェネリック」であるため、複数の要素に一致する可能性があり( id1つの要素のみに一致する属性で選択するのではなく)、DOM要素に一致する可能性があります.子ビューなどを期待していません。(これはもちろん、Marionette がいつ DOM を参照してセレクターをフェッチするかによって異なります。)

また、可能であれば、ツリー構造のニーズに合わせて複合ビューを使用することを検討します。http://davidsulc.com/blog/2013/02/03/tutorial-nested-views-using-backbone-marionettes-compositeview/およびhttp://lostechies.com/derickbailey/2012/04/05/composite-を参照してください。ビュー-ツリー構造-テーブルなど/

于 2013-09-03T16:02:58.500 に答える