我正在尝试通过以下方式跟踪路由的更改:
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();
});谢谢!
发布于 2014-01-20 02:46:36
是的,看起来像是圆形的。试试这个:
define([
'require',
'jquery',
'underscore',
'backbone',
'router',
'text!templates/sidebar.html'],
function(require, $, _, Backbone, Router, SidebarTemplate) {
return function () {
Router = require("router");然后,当从其他模块使用SidebarView时,您需要:
SideBarView SideBarViewInst = var ()
这将延迟导入,直到加载完所有模块。
https://stackoverflow.com/questions/21219575
复制相似问题