首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主干路由更改事件

主干路由更改事件
EN

Stack Overflow用户
提问于 2014-01-20 00:46:10
回答 1查看 514关注 0票数 0

我正在尝试通过以下方式跟踪路由的更改:

代码语言:javascript
复制
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;
    });

我得到了:

代码语言:javascript
复制
Uncaught TypeError: Cannot read property '_listenId' of undefined 

在这一行上:

代码语言:javascript
复制
this.listenTo(Router, 'route', this.routeChanged, this);

我认为这是因为存在循环依赖。真的是这样吗?我该如何解决这个问题呢?

router.js的相关来源:

代码语言:javascript
复制
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();
    });

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-01-20 02:46:36

是的,看起来像是圆形的。试试这个:

代码语言:javascript
复制
define([
    'require',
    'jquery', 
    'underscore',
    'backbone',
    'router',
    'text!templates/sidebar.html'], 
    function(require, $, _, Backbone, Router, SidebarTemplate) {
      return function () {
        Router = require("router");

然后,当从其他模块使用SidebarView时,您需要:

SideBarView SideBarViewInst = var ()

这将延迟导入,直到加载完所有模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21219575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档