2

作業中のMarionetteアプリケーションの領域でビューを使用してレイアウトをレンダリングすることに関して、実用的なソリューションがありますが、何かが正しく感じられません。DOMに直接何かを追加する必要がありますか?

これがコントローラーでの私のメソッドです:

 //Grab the main Layout
        var layout = new APP.Views.LayoutView();

        //Render that layout
        layout.render();

         //Make the model
        var simpleModel = new APP.Models.simpleModel({
          "field1" : "foo",
          "field2" : "bar"
        });


        layout.header.show(new APP.Views.subView({model: simpleModel}));

        $('body').html(layout.el);

それは私にとって不自然に感じる最後の部分です。これは主に、「layout.header.show」を.html()の後に移動すると、正しくレンダリングされないためです。DOMにプッシュした後に動的に変更できない場合のリージョンのポイントは何ですか?

これが私のレイアウトです:

APP.Views.LayoutView = Backbone.Marionette.Layout.extend({

  template: "#layoutTemplate",

  className : 'wrapper',

  regions: {
    header: "#header",
    footer: "#footer"
  }


});

そしてここにサブビューがあります:

APP.Views.subView = Backbone.Marionette.ItemView.extend({

    template : '#headerTemplate',

    className: 'container'


});

私が言ったように、これは機能しますが、リージョンを適切に使用していないように感じます。レイアウトをDOMにレンダリングした後、リージョンにアクセスできるようにする、より優れた、より簡潔な方法はありますか?

マリオネットのドキュメントでは、ページ上で物事を取得するために.html()を使用することについては言及されていないようです-これは不要であるために省略されているのか、それとも想定されているのでしょうか。

誰か助けてもらえますか?

4

1 に答える 1

4

さて、これは、アプリケーションで「領域」を作成し、.show()を使用してその内部のレイアウトを表示することで回避できるようです。

SOで見つけたフィドルへのリンクは次のとおりです。http://jsfiddle.net/TDqkj/6/

別の質問と同様に:Backbone.jsのMarionetteのレイアウトを理解する

特にフィドルには次のコードがあります。

App = new Backbone.Marionette.Application();
App.addRegions({
   'nav': '#nav',
  'content': '#content'
});

プログラマーは、これらの領域にレイアウトを追加するために使用します。つまり、DOMに追加する必要はありません。

他の誰かがよりエレガントな解決策を持っているなら、投稿してください!

于 2013-03-27T12:37:28.877 に答える