2011-04-30 5 views
6

컨트롤러 속성이 authenticated이고 기본값은 false입니다. 그러나 로그인보기에서 true으로 설정할 수 있어야합니다. 또한, 내 로그 아웃보기에서 false으로 설정할 수 있어야합니다. 뷰 내에서이 속성을 어떻게 노출시킬 수 있습니까?backbone.js - 뷰의 컨트롤러 속성

var Controller = Backbone.Controller.extend({ 
    ... 
    authenticated: false, 

    login: function() { 
     if(this.authenticated) 
     { 
      location.hash = '!/dashboard'; 
     } else { 
      new LoginView(); 
     } 
    }, 

    logout: function() { 
     $.post('/admin/logout', {}, 
     function(resp){ 
     }, "json"); 

     this.authenticated = false; 
     location.hash = '!/login'; 
    } 
    ... 
}); 

답변

7

컨트롤러가 로그인 및 로그 아웃 기능을 제대로 수행하고 있습니다. 당신이해야 할 일은 view fire backbone.js 이벤트를 가지고 콘트롤러가 이벤트를 수신하도록 등록하는 것입니다. 또한

var loginView = new LoginView(...); // params as needed 
loginView.bind("login_view:login", this.login); 
loginView.bind("login_view:logout", this.logout); 
loginView.render(); 

, 당신은 컨트롤러가 이벤트를 처리하도록 설정되어 있음을 보장 할 필요가 있으므로 이런 일이 당신의 초기화 함수에서 필요하다 :

를 컨트롤러에 어딘가에

, 당신은 같은 뭔가가 필요
_.extend(this, Backbone.Events); 
_.bindAll(this, "login", "logout"); 

보기에 이벤트 코드가 필요하므로 초기화에 _.extend (...) 호출을 추가해야합니다. 보기에

은 적절한 경우, 다음이 필요합니다

this.trigger("login_view:login"); 

및 최종 참고로

this.trigger("login_view:logout"); 

, 당신은 컨트롤러가 로그인 및 로그 아웃 서버 호출을 수행합니다. 이 뷰에서 필요한 것은 이벤트와 잠재적으로 채워진 모델 또는 데이터뿐입니다. 이 데이터는 트리거 문에서 매개 변수로 전달되며 로그인/로그 아웃 기능에서 인수로 수신됩니다. 그러나 나는 이것을 코드에 포함시키지 않았다.

기본적으로보기가 DOM을 관리하고 응용 프로그램 이벤트를 컨트롤러에 버블 링해야합니다. 그러면 컨트롤러는 서버를 중재하고 필요한 모든보기를 관리 할 수 ​​있습니다.

관련 문제