2014-02-11 5 views
0

Я использую Backbone + requirejs для создания моего приложения, в модуле ниже функция инициализации используется для загрузки функции инициализации из двух других модулей, называемых HomeView, InnerView, в этом модуле я бы как слушать события Backbone.history. но модуль не слушал такие события.Магистраль Слушайте события Backbone.history

маршрутизатор

// Filename: router.js 
define([ 
'jquery', 
'underscore', 
'backbone', 
'app/config', 
'app/views/homeview', 
'app/views/inner_view' 
], function($, _, Backbone, Config, HomeView, InnerView) { 

var AppRouter = Backbone.Router.extend({ 

    initialize: function() { 

    }, 
    routes: { 
     // Define some URL routes 
     '': 'defaultRoute', 
     '!/home': 'defaultRoute', 
     '!/activities': 'activities', 
     '!/activities/:id': 'activity', 
     '!/vacancies': 'vacancies', 
     '!/vacancies/:id': 'vacancies', 
     // 404, not found 
     '*actions': '404' 
    }, 
    defaultRoute: function() { 

     //if this route is served from inner pages, we have to trigger "close:Inner" 
     Backbone.trigger('close:Inner'); 
     Backbone.current = 'Home'; 

    }, 
    activities: function(){ 

     Backbone.trigger('view:Activities'); 
     Backbone.trigger('close:'+Backbone.current);    
     Backbone.current = 'Activities';    

    }, 
    activity: function(id){ 

     Backbone.trigger('close:' + Backbone.current); 
     Backbone.current = 'Activity'; 

    }, 
    vacancies: function(){ 

    },  
    404: function(actions) { 

     // We have no matching route, lets display 404 
     $('.content_wapper').html(actions + " no such page on the system"); 

    } 

}); 

var initialize = function() { 

    HomeView.initialize(); 
    InnerView.initialize();     

    Backbone.appRouter = new AppRouter(); 
    Backbone.history.start(); 

}; 

return { 
    initialize: initialize 
}; 
}); 

Что не так, что мешает мне слушать случае backbone.history внутри другой точки зрения?

Innerview Модуль

// Filename: views/boilerplate.js 
define([ 
'jquery', 
'underscore', 
'backbone', 
'app/config', 
'text!templates/inner_header.html', 
'bootbox', 
'text!templates/breadcrumb.html', 
'purl' 
], function($, _, Backbone, Config, inner_header_template, bootbox, breadcrumbTemplate) { 

var url = $.url(), 
    InnerView = Backbone.View.extend({ 

    el: $(".header_content"), 
    template: _.template(inner_header_template), 
    initialize: function(options) { 

     Backbone.history.on('route:activities', this.activities);   

    }, 
    render: function() {}, 
    activities: function() { 
     alert('activities'); 
    }, 
    events: {}, 
    close: function() { 

     $('.top_menu').remove(); 
     $('.main_menu_inner').remove(); 
     $('.content_container').empty(); 
     $(this.el).unbind(); 
     delete this.$el; //delete the jQuery wrapped object variable 
     delete this.el; //delete the variable reference to this node 

    } 

}); 

var initialize = function() { 

    new InnerView(); 

}; 

return { 
    initialize: initialize 
}; 


}); 

ответ

0

Вы запуская события на Backbone объект не Backbone.history, попробуйте следующее:

Backbone.history.trigger('close:Inner'); 

Вы должны слушать на маршрутизаторе а не на Backbone.history. Here is an example, которые иллюстрируют это.

+0

Я спрашивал об этом событии 'Backbone.history.on ('route: activities', this.activities);' и событие, которое вы упомянули, отлично подходит для меня :) – ahmedsaber111

+0

Где вы запускали 'route: activities' мероприятие ? –

+0

Внутри InnerView, который был инициализирован в функции инициализации модуля маршрутизатора – ahmedsaber111

Смежные вопросы