我試圖跟蹤通過更改路線:主幹航線更改事件
define([
'jquery',
'underscore',
'backbone',
'router',
'text!templates/sidebar.html'],
function($, _, Backbone, Router, SidebarTemplate) {
var SidebarView = Backbone.View.extend({
el: $('#sidebar'),
initialize: function() {
_.bindAll(this, 'render');
this.listenTo(Router, 'route', this.routeChanged, this);
},
events: {
'click a' : 'navigated'
},
render: function() {
var cTem = _.template(SidebarTemplate);
this.$el.html(cTem);
},
routeChanged: function(router, route) {
console.log(route);
},
navigated: function(a) {
this.$('li').removeClass();
$(a.currentTarget).parent().addClass('active')
}
});
return SidebarView;
});
我越來越:
Uncaught TypeError: Cannot read property '_listenId' of undefined
在這條線:
this.listenTo(Router, 'route', this.routeChanged, this);
我認爲這是因爲有循環依賴。這確實是這樣嗎?我怎樣才能解決這個問題?
爲router.js相關來源:
define([
'jquery',
'underscore',
'backbone',
'views/dashboard',
'views/users',
'views/venues',
'views/payments',
'views/header',
'views/sidebar',
'views/signup',
'views/login'],
function($, _, Backbone, DashboardView, UsersView, VenuesView, PaymentsView, HeaderView, SidebarView, SignupView, LoginView) {
var Router = Backbone.Router.extend({
initialize: function() {
self.sidebarView = new SidebarView();
self.headerView = new HeaderView();
self.sidebarView.render();
self.headerView.render();
},
routes: {
'': 'showDashbaord',
'dashboard': 'showDashbaord',
'users': 'showUsers',
'venues': 'showVenues',
'payments': 'showPayments',
'login': 'showLogin',
'signup': 'showSignup',
'logout': 'logout'
}
});
return new Router();
});
謝謝!
我可能會檢查您的路由器是您期望的對象:什麼是Router.listenId? –
@DanBaker路由器未定義。我認爲這是因爲循環依賴。 – 0xSina
解決辦法可能是將路由器綁定到您的應用程序名稱空間,即MyProj.router(我不使用requirejs) –