2014-01-19 36 views
0

我試圖跟蹤通過更改路線:主幹航線更改事件

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(); 
    }); 

謝謝!

+0

我可能會檢查您的路由器是您期望的對象:什麼是Router.listenId? –

+0

@DanBaker路由器未定義。我認爲這是因爲循環依賴。 – 0xSina

+0

解決辦法可能是將路由器綁定到您的應用程序名稱空間,即MyProj.router(我不使用requirejs) –

回答

0

是的,看起來是圓形的。試試這個:

define([ 
    'require', 
    'jquery', 
    'underscore', 
    'backbone', 
    'router', 
    'text!templates/sidebar.html'], 
    function(require, $, _, Backbone, Router, SidebarTemplate) { 
     return function() { 
     Router = require("router"); 

然後使用來自其他模塊SidebarView時,你將需要:

VAR SideBarViewInst = SideBarView()

,直到所有的模塊被加載這將延遲進口。

+0

未捕獲的錯誤:模塊名稱「路由器」尚未加載上下文:_。使用require([]) – 0xSina

+0

已更新。 ...... –