2011-04-30 27 views
6

Tengo una propiedad de controlador llamada authenticated que tiene como valor predeterminado false. Sin embargo, en mi vista de inicio de sesión necesito poder configurarlo en true. Además, en mi vista de cierre de sesión necesito poder configurarlo en false. ¿Cómo puedo exponer esta propiedad dentro de la vista?backbone.js - propiedades del controlador desde una vista

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'; 
    } 
    ... 
}); 

Respuesta

7

Su controlador está haciendo correctamente la función de inicio y finalización de sesión. Todo lo que necesita hacer es tener su vista fire backbone.js events y hacer que se registre el controlador para recibirlos.

En algún lugar de su controlador, necesita algo como:

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

Además, es necesario para asegurar que el controlador está configurado para controlar los eventos, por lo que se necesita algo como esto en su función de inicialización:

_.extend(this, Backbone.Events); 
_.bindAll(this, "login", "logout"); 

Su vista necesitará el código de evento, así que asegúrese de agregar la llamada _.extend (...) a su inicialización.

En su opinión, en su caso, se necesita:

this.trigger("login_view:login"); 

y

this.trigger("login_view:logout"); 

Como nota final, desea que el controlador para hacer las llamadas al servidor de conexión y desconexión. Todo lo que necesita de la vista es un evento y potencialmente un modelo poblado o datos de otra manera. Estos datos se pasarían como un parámetro en la (s) declaración (es) de activación y se recibirían como un argumento en las funciones de inicio de sesión/cierre de sesión. No he incluido esto en el código, sin embargo.

Básicamente, desea que la vista administre los eventos de la aplicación DOM y de burbujas en el controlador. El controlador puede mediar con el servidor y administrar las vistas necesarias.

Cuestiones relacionadas