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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top