「シェル」または「レイアウト」ビューは変更されないため、アプリケーションの起動時に (ルートをトリガーする前に) レンダリングし、さらにビューをレイアウト ビューにレンダリングする必要があります。
レイアウトが次のようになったとします。
<body>
<section id="layout">
<section id="header"></section>
<section id="container"></section>
<section id="footer"></section>
</section>
</body>
レイアウト ビューは次のようになります。
var LayoutView = Backbone.View.extend({
el:"#layout",
render: function() {
this.$("#header").html((this.header = new HeaderView()).render().el);
this.$("#footer").html((this.footer = new FooterView()).render().el);
return this;
},
renderChild: function(view) {
if(this.child)
this.child.remove();
this.$("#container").html((this.child = view).render().el);
}
});
次に、アプリケーションの起動時にレイアウトをセットアップします。
var layout = new LayoutView().render();
var router = new AppRouter({layout:layout});
Backbone.history.start();
そしてあなたのルーターコードで:
var AppRouter = Backbone.Router.extend({
initialize: function(options) {
this.layout = options.layout;
},
home: function() {
this.layout.renderChild(new HomeView());
},
other: function() {
this.layout.renderChild(new OtherView());
}
});
この特定の猫の皮を剥ぐ方法はいくつかありますが、これは私が通常扱う方法です. renderChild
これにより、「トップレベル」ビューをレンダリングするための単一の制御ポイント ( ) が提供remove
され、新しい要素がレンダリングされる前に前の要素が確実に削除されます。これは、ビューのレンダリング方法を変更する必要がある場合にも役立ちます。