Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干路由更改事件_Javascript_Backbone.js - Fatal编程技术网

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[]