Javascript 主干视图:无法将视图附加到以前渲染的视图
这是我的主干代码 app.jsJavascript 主干视图:无法将视图附加到以前渲染的视图,javascript,jquery,backbone.js,underscore.js,Javascript,Jquery,Backbone.js,Underscore.js,这是我的主干代码 app.js window.App = { Models: {}, Views: {} }; window.Template = {}; app/router.js App.Router = Backbone.Router.extend({ initialize: function () { Backbone.history.start({pushState: true}); App.layout = new App.Views.Layout();
window.App = {
Models: {},
Views: {}
};
window.Template = {};
app/router.js
App.Router = Backbone.Router.extend({
initialize: function () {
Backbone.history.start({pushState: true});
App.layout = new App.Views.Layout();
App.layout.render();
$('#app').append(App.layout.el);
},
routes: {
'': 'index'
},
index: function () {
console.log('index routed.');
App.home = new App.Views.Home();
App.home.render();
$('#content').html(App.home.el);
}
});
app/templates.js
Template.layout = _.template(
"<header id=top-bar>"+
"<nav id=user-panel>"+
"<ul>"+
"<li><a class=login href=#>Login</a></li>"+
"<li><a class=register href=#>Registrati gratis</a></li>"+
"</ul>"+
"</nav>"+
"</header>"+
"<div id=wrapper>"+
"<section id=mid-bar>"+
"<a id=logo href=#><img src=public/img/logo.png></a>"+
"</section>"+
"<section id=content>"+
"</section>"+
"</div>"
);
Template.home = _.template("Benvenuto in Virtualmix");
app/views/home.js
App.Views.Home = Backbone.View.extend({
tagName: 'p',
template: Template.home,
render: function () {
this.$el.html(this.template);
}
});
最后是我的main.js
$(document).ready(function () {
App.router = new App.Router;
});
布局视图(从路由器初始化函数初始化…)正确呈现,但从索引函数初始化和呈现的主视图似乎在我先前生成的布局上没有输出任何内容(我想在布局生成的#content元素上嵌套主视图…)
我认为这是一个JQuery问题,但我不知道如何以及为什么…问题是您调用
Backbone.history.start()
太早了。当您启动历史记录时,将立即触发路由,此时您的布局视图
尚未呈现,并且页面上没有#内容
元素
骨干说:
在页面加载过程中,在应用程序完成其所有路由器的创建后,请确保调用Backbone.history.start()。。。[我的重点]
我仍然希望我的主(“应用”)路由器负责启动历史记录,因此我通常在路由器上创建一个start
方法:
AppRouter = Backbone.Router.extend({
start: function() {
Backbone.history.start();
},
//...
});
这样称呼它:
var appRouter = new AppRouter();
var otherRouter = new OtherRouter(); // if you have any
appRouter.start();
var appRouter = new AppRouter();
var otherRouter = new OtherRouter(); // if you have any
appRouter.start();