2016-03-18 12 views
0

Unten ist meine Ansicht und Modell. Jedes Mal, wenn ich einen frischen serverRequestData Daten für jeden Aufruf von initiateTest Daten vorbereitet und übergebe es an save Methode.Unerwartete Verhalten mit speichern Methode

Also, mein Server Anruf sollte mit Daten in serverRequestData vorliegen. Es passiert richtig für den ersten Aufruf von initiateTest, aber ab dem zweiten Mal sehe ich, dass die Antwort des vorherigen Serveraufrufs übergeben wird.

Das sieht für mich wirklich komisch aus, denn ich bereite mich eindeutig auf das neue initiateTest vor.

Was mache ich etwas falsch, das einige interne Sache von backbone.js schraubt?

Ausblick:

define(['jquery', 'underscore', 'backbone', 'models/adhocmodel', 'models/resultmodel', 
     'text!templates/adhoc/adhocTemplate.html'], function($, _, Backbone, 
     adhocModel, resultModel, adhocTemplate) { 

    var adhocHistoryView = Backbone.View.extend({ 

     resultmod : new resultModel(), 
     model : new adhocModel(), 
     el : $("#container"), 

     events : { 
      "click #test" : "initiateTest" 
     }, 

     initiateTest : function() { 
      var serverRequestData = {"myid":"AAA", 
         "fname":"Wade", 
         "lname": "Wade", 
         "telephoneNumber":telNum, 
         "testMode":"Initial" }; 

      console.log(serverRequestData); 

      var that = this; 
      this.model.save(serverRequestData, { 
       url: "forms/serviceDiagnostic/startTest", 
       type: "POST", 
       contentType: "application/json", 
       success : function(model, response) { 
        that.model.adhocCommon.hasTestResultArrived = true; 
        that.model.testResults = response; 
        that.render(); 
        $('#container').trigger("create"); 
       }, 
       error : function(model, response) { 
        console.log("####### Error recieved ...."); 
       } 
      }); 
     }, 

     initialize : function() { 
     }, 

     render : function() { 

      console.log(this.model); 

      //this.$el.html(adhocTemplate); 
      var data = { 
        model:this.model, 
        _:_ 
      }; 
      var compiledTemplate = _.template(adhocTemplate, data); 

      this.$el.html(null); 
      this.$el.html(compiledTemplate); 
      return this; 
     } 
    }); 

    return adhocHistoryView; 
}); 

Modell:

define([ 'backbone' ], function(Backbone) { 

    var adhocModel = Backbone.Model.extend({ 

     initialize : function() { 

     }, 

     poolHandler : null, 

     poolCounter : 0, 

     adhocCommon : { 
      hasTestResultArrived : false 
     }, 

     testResults : {} 

    }); 

    return adhocModel; 
}); 
+0

Wenn du '[...] ab dem zweiten Mal sagst, sehe ich, dass die Antwort des vorherigen Serveraufrufs bestanden ist ', was meinst du mit' bestanden'? Übergeben an _ was_? –

+0

@ try-catch-finally Ab dem zweiten Mal ist das Konsolenprotokoll korrekt, wenn Daten, die wirklich an den Server übergeben werden, falsch sind. Ich kann in der Registerkarte "Netzwerk" des Browsers und auch auf Serverseite sehen, dass es nicht die gleichen Daten sind, die gedruckt werden, aber es ist die Antwort des Servers der letzten Anfrage. – hagrawal

+0

'that.model.testResults = Antwort' ..? Die Antwort wird automatisch mit den Attributen des Modells nach Backbone zusammengeführt. Alle Ihre Modelleigenschaften sind Attribut-Hashs außerhalb von Modellen. Ich glaube, du hast missverstanden, wie das Backbone funktioniert. Wenn wir solche Dinge manuell erledigen müssen, dann brauchen wir kein Backbone ... wir können das auf die alte Weise tun ... –

Antwort

2

Dies ist, wie Model.save() funktioniert. Backbone erwartet, dass Ihr Server mit dem neuesten Stand des Modells auf dem Server antwortet, und Ihr Modell wird mit dieser Antwort aktualisiert.

auch:

Die Attribute Hash (wie in Satz) sollten die Attribute enthalten, die Sie ändern möchten - Schlüssel, die nicht erwähnt sind, werden nicht verändert werden - aber eine vollständige Darstellung die Ressource wird die (Hervorhebung von mir)

So nach dem ersten Anruf, Modell-Servers mit dem Server-Antwort aktualisiert wird gesendet werden, und von der nächsten Zeit an, wird es entlang gesendet werden mit t Er schreibt die Attribute an save().

Wenn Sie ändern möchten, was an den Server gesendet wird, können Sie die save Methode überschreiben, wenn Sie ändern möchten, was in Modell aktualisiert wird, wenn die Antwort empfangen wird, können Sie eine parse Methode definieren.

+0

Oh ok. Danke für Ihre Eingaben. Ich habe noch nicht mit Ihren Eingaben getestet, aber ich denke, es wird funktionieren, sieht vernünftig aus. – hagrawal

Verwandte Themen