私のアプリはルータが変更されてから別のビューをレンダリングするように設計されていますが、他のビューオブジェクトを作成する方法についてはわかりません。backbone.jsで別のビューオブジェクトを設定する方法
router.js
var app = app || {};
(function() {
'use strict';
var views = app.view = app.view || {};
app.Router = Backbone.Router.extend({
routes: {
'*home': 'homeRoute',
'about': 'aboutRoute',
'contact': 'contactRoute'
},
initialize: function() {
// create the layout once here
this.layout = new views.Application({
el: 'body',
});
},
homeRoute: function() {
var view = new views.Home();
this.layout.setContent(view);
},
aboutRoute: function() {
var view = new views.About();
this.layout.setContent(view);
},
contactRoute: function() {
var view = new views.Contact();
this.layout.setContent(view);
}
});
})();
view.js
var app = app || {};
(function() {
'use strict';
//views linitalize
var views = app.view = app.view || {};
views.Application = Backbone.View.extend({
initialize: function() {
// caching the jQuery object on init
this.$content = this.$('#content');
this.$loading = this.$('#loading');
},
setContent: function(view) {
var content = this.content;
if (content) content.remove();
this.showSpinner();
content = this.content = view;
console.log(view);
//content rednering
this.$content.html(content.render().el, this.hideSpinner());
},
showSpinner: function() {
this.$loading.show();
},
hideSpinner: function() {
this.$loading.hide();
},
});
views.Home = Backbone.View.extend({ });
views.About = Backbone.View.extend({
initialize: function(){
this.render();
},
render: function(){
var template = _.template("<strong>About page</strong>");
}
});
views.Contact = Backbone.View.extend({
my_template: _.template("<strong>Contact page</strong>");
});
})();
index.htmlを
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<ul class="pills">
<li><a href="#/">Home</a></li>
<li><a href="#/about">About</a></li>
<li><a href="#/contact">Contact</a></li>
</ul>
<div id="content"></div>
<div id="loading">load the page...</div>
<div id="sumMenu"></div>
<script src="lib/jquery-3.1.1.min.js"></script>
<script src="lib/underscore.js"></script>
<script src="lib/backbone.js"></script>
<script src="lib/backbone.localstorage.js"></script>
<script src="routers/router.js" ></script>
<script src="views/view.js" ></script>
<script src="views/app.js" ></script>
</body>
</html>
あなたはこのコードを見れば、あなたはよわかる。上記のことを伝えるのは難しいです。 view.jsで
見て、私は3つのビュープロパティ(home
、about
、contact
)および実行されていないものを含まれているコードを書きました。
私は本当にオブジェクトの作成後に、オブジェクトの値とレンダリングを設定する方法を知りたいですか?
ありがとうございました卿あなたの非常に親切:) 私はあなたの答えの上にいくつかの質問があります 私は** _ bindRoutes **を書き、それから建設コールは自動ロードですか? もレンダリングします**これを返す; **あまりにも? –
@SeanSin '_bindRoutes'は、Backboneのルーターの「プライベート」機能です。これは、任意のルータコンストラクタで呼び出されます。私は参考に私の答えにそれを含めた。レンダリングで 'return this'をコンベンションにすると、私はこれに関するドキュメンテーションを引用しました。デフォルトの['render'](https://github.com/jashkenas/backbone/blob/7da4ed73e7402baf614a50a6551d47ace68b5239/backbone.js#L1348-L1353)はこれをデフォルトで行い、連鎖関数呼び出しを有効にします。 –