2017-10-14 3 views
0

Ich kämpfe mit meiner ersten Vanille JS MVC App. Mein Modell macht eine AJAX-Anfrage an den Server ... und dann aktualisiert der Controller die Ansicht, aber es wartet nicht auf das AJAX-Versprechen, so dass es nur die Ansicht mit nichts aktualisiert. Wie kann ich den Controller von asynchronen Auflösungen benachrichtigen?Vanilla JS MVC - Controller vom Modell benachrichtigen, wenn AJAX gelingt

Controller:

function DeadController() { 
     this.model = new DeadModel(); 
     this.view = new DeadView(); 
     this.updateView(); 
    } 
    DeadController.prototype.updateView = function() { 
     this.view.render(this.model.data); 
    } 

Modell:

function DeadModel() { 
    this.uri = 'api' + window.location.pathname; 
    this.data = this.getResponse(this.uri); 
} 
DeadModel.prototype.getResponse = function(uri) { 
    $.get(uri, (response) => { 
     return response; 
    }); 
} 

Antwort

2

Kein Wert von getResponse() zurückgegeben. Wenn der Wert zurückgegeben wird, sollte der Wert ein jQuery-Versprechungsobjekt sein, das von $.get()

DeadModel.prototype.getResponse = function(uri) { 
    return $.get(uri); // `return` the jQuery promise object 
} 

DeadController.prototype.updateView = function() { 
    this.model.data // jQuery promise object returned from `$.get()` 
    .then(this.view.render) // pass response data to `this.view.render` 
    .fail(function(err) { // handle error 
     console.error(err) 
    }) 
} 
zurückgegeben wird