2013-11-28 4 views
1

새보기를로드하기 전에 백본에서 내보기를 정리하고 싶습니다.백본 라우터에서 이벤트를 바인딩 해제하고 닫을 수 없습니다.

Backbone.View.prototype.close = function() { 

       this.$el.empty(); 

       //this.$el.unbind(); 

       this.undelegateEvents(); 

       console.log('close'); 
      }; 

추신 :이 들어

, 내가 검색 및 백본 객체에 prototype 속성을 추가 한이 가까운라고 empty()가 작동하지 않는 것, unbind하지 않는 것 - undelegateEvents가 작동합니다.

지금, 나는 내 라우터에 가까운 함수를 호출 뜨거운 알아낼 수 없습니다

define([ 
     'jquery', 
     'underscore', 
     'backbone', 
     'views/userList', 
     'views/addUser' 
    ], function ($, _, Backbone, UserList, AddUser) { 

     var Router = Backbone.Router.extend({ 

      routes: { 
       '' : 'home', 
       'new' : 'addUser' 
      } 
     }); 

     var initialize = function() { 

      var router = new Router(); 

      router.on('route:home', function() { 

       userList = new UserList(); 

       userList.render(); 

      }); 

      router.on('route:addUser', function() { 

       addUser = new AddUser(); 

       addUser.render(); 

      }); 

      Backbone.history.start(); 

     } 

     return { 

      initialize : initialize 
     } 
    }); 

어떤 아이디어? 다음

var SomeBaseView = Backbone.View.extend({ 
    remove: function() { 
     this.$el.empty(); // Instead of this.$el.remove(); 
     this.stopListening(); 
     this.undelegateEvents(); 
     return this; 
    } 
}); 

하고 SomeBaseView에서 모든 의견을 도출 : 모든

답변

1

첫째, 단지 표준 remove 메소드를 오버라이드 (override), close를 사용하지 마십시오. Backbone.View.prototype으로 어지럽히는 것은 피해야합니다.

그런 다음, 다음과 같이 전역 변수 사용을 중지 : 경로 처리기에서

userList = new UserList(); 

합니다.

그런 다음 어떤보기가 현재 열려 있는지 추적하여 다음보기를 시작하기 전에 remove을 호출 할 수 있습니다. 더이 아마도 같은 라우터 :이 접근 방식을 필요로하지 않기 때문에

var Router = Backbone.Router.extend({ 
    routes: { 
     '' : 'home', 
     'new' : 'addUser' 
    }, 
    home: function() { 
     if(this.currentView) 
      this.currentView.remove(); 
     this.currentView = UserList(); 
     this.currentView.render(); 
    }, 
    addUser: function() { 
     if(this.currentView) 
      this.currentView.remove(); 
     this.currentView = AddUser(); 
     this.currentView.render(); 
    } 
}); 

당신은 router.on 전화를 드롭 것입니다.

관련 문제