Показать сообщение отдельно
  #1 (permalink)  
Старый 22.03.2014, 15:36
Аспирант
Отправить личное сообщение для San4ezy Посмотреть профиль Найти все сообщения от San4ezy
 
Регистрация: 15.11.2009
Сообщений: 38

События Backbone дублируются
Приветствую! Начал изучать Backbone и столкнулся с такой проблемой (код ниже). При переходе на 'tasks_table/:id' вызывается событие 'TasksTable:show'. Это событие обрабатывается вьюхой App.Views.TaskTb. Обработчик вызывает самописную функцию getRequest, отсылающую запрос на сервер и получающую jsonp, и создает новую коллекцию.
Проблема следующая. При переходе на указанный урл (с загрузкой страницы) все работает верно. Но если вызвать событие без перезагрузки страницы, например вызовом navigate или ссылкой на анкор, то событие срабатывает 2 раза. Следующий раз 4 и так далее. Как исправить эту ошибку?
(function(){

    window.App = {
        Models: {},
        Views: {},
        Collections: {},
        Router: {}
    };
    var vent = _.extend({}, Backbone.Events);

    // Router
    App.Router = Backbone.Router.extend({
        routes: {
            '': 'index',
            'tasks_table/': 'tasksTable',
            'tasks_table/:id': 'tasksTable'
        },
        index: function(){
            console.log('index');
        },
        tasksTable: function(id){
            vent.trigger('TasksTable:show', id);
        }
    });

    // View
    App.Views.TaskTb = Backbone.View.extend({
        tagName: 'table',
        initialize: function(){
            vent.on('TasksTable:show', this.show, this);
        },
        show: function(id){
            getRequest('GetTasksTable', 'project_type=' + id, function(data){
                var view = new App.Views.TaskTb({collection: new App.Collections.TaskTb(data['data'])});
                $('#tasks_table').append(view.render().el);
            });
        }
    });
    new App.Views.TaskTb();

    new App.Router();
    Backbone.history.start();
}());

И еще, при этом запросы выполняются значительно медленнее, чем напрямую к серверу. Может я что-то не так делаю?
Заранее всем спасибо!
Ответить с цитированием