backbone.js - Controller-Eigenschaften aus einer Ansicht
-
27-10-2019 - |
Frage
Ich habe eine Controller-Eigenschaft namens authenticated
, die standardmäßig false
ist.In meiner Login-Ansicht muss ich sie jedoch auf true
setzen können.Außerdem muss ich in meiner Abmeldeansicht in der Lage sein, sie auf false
zu setzen.Wie kann ich diese Eigenschaft in der Ansicht verfügbar machen?
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';
}
...
});
Lösung
Ihr Controller führt die Anmelde- und Abmeldefunktionen korrekt aus. Alles, was Sie tun müssen, ist, dass Ihre Ansicht die Ereignisse von backbone.j auslöst und der Controller registriert ist, um diese zu empfangen.
Irgendwo in Ihrem Controller benötigen Sie Folgendes:
var loginView = new LoginView(...); // params as needed
loginView.bind("login_view:login", this.login);
loginView.bind("login_view:logout", this.logout);
loginView.render();
Außerdem müssen Sie sicherstellen, dass der Controller für die Verarbeitung von Ereignissen eingerichtet ist. Daher ist in Ihrer Initialisierungsfunktion Folgendes erforderlich:
_.extend(this, Backbone.Events);
_.bindAll(this, "login", "logout");
Ihre Ansicht benötigt den Ereigniscode. Fügen Sie daher unbedingt den Aufruf _.extend (...) in die Initialisierung ein.
Aus Ihrer Sicht benötigen Sie gegebenenfalls:
this.trigger("login_view:login");
und
this.trigger("login_view:logout");
Abschließend möchten Sie, dass der Controller die An- und Abmeldeserveraufrufe ausführt. Alles, was Sie aus der Ansicht benötigen, ist ein Ereignis und möglicherweise ein ausgefülltes Modell oder andere Daten. Diese Daten würden als Parameter in den Triggeranweisungen übergeben und als Argument in den Anmelde- / Abmeldefunktionen empfangen. Ich habe dies jedoch nicht in den Code aufgenommen.
Grundsätzlich möchten Sie, dass die Ansicht das DOM verwaltet und Anwendungsereignisse auf den Controller überträgt. Der Controller kann dann mit dem Server vermitteln und alle erforderlichen Ansichten verwalten.