Javascript 主干路由更改事件
我试图通过以下方式跟踪路线的变化:Javascript 主干路由更改事件,javascript,backbone.js,Javascript,Backbone.js,我试图通过以下方式跟踪路线的变化: define([ 'jquery', 'underscore', 'backbone', 'router', 'text!templates/sidebar.html'], function($, _, Backbone, Router, SidebarTemplate) { var SidebarView = Backbone.View.extend({ el: $(
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();
});
谢谢 是的,看起来是圆形的。试试这个:
define([
'require',
'jquery',
'underscore',
'backbone',
'router',
'text!templates/sidebar.html'],
function(require, $, _, Backbone, Router, SidebarTemplate) {
return function () {
Router = require("router");
然后,当从其他模块使用SidebarView时,您需要:
var SideBarView inst=SideBarView
这将延迟导入,直到加载所有模块。我可能会检查您的路由器是否是您期望的对象:what is Router.listenId?@DanBaker Router未定义。我认为这是因为循环依赖。一个解决办法可能是将路由器与应用程序名称空间(即MyProj.Router)绑定。我不使用RequireJS Router.js的代码是什么?@Lynhidey更新了Router.js的相关源代码-注意我是如何在初始化函数中初始化sidebarView的。我想这就是问题所在。因为sidebarView需要router.jsUncaught错误:尚未为上下文加载模块名router:\。使用require[]