2016-08-05 6 views
0

Ich bekomme eine verschachtelte JSON-Daten von REST. Jetzt möchte ich diesen Wert in einer Variablen erfassen. Alles funktioniert gut, aber ich weiß nicht, wie ich diese Variable initialisieren soll.Initialize Modellelemente in Javascript/Backbone

Also hier ist meine Initialisierungsmethode von Model.

initialize: function() { 
     var self = this; 
     if (!this.get('dropdownData')) { 
       this.set({ 
        dropdownData: [] 
       }); 
      } 
     } 
} 

Ajax-Aufruf:

fetchDropdown: function(data) { 
      var self = this; 
      var d = $.Deferred(); 
      var dropdownRequest = $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       url: this.urlRoot, 
       data: JSON.stringify(data) 
      }); 
      dropdownRequest.done(function(data) 
      { 
       self.set({ 
          dropdownData: data 
         }); 
       console.log("JSON SUCCESS!! YAY!!"); 
       d.resolve(); 

      }); 

Jetzt dropdownData als dropdownData: {} or dropdownData: [] initialisiert werden soll oder brauche ich es überhaupt nicht zu initialisieren.

S.S: Logisches Code-Snippet funktioniert. Ich will nur wissen, was der richtige Weg ist in BACKBONE MODEL

+0

Mögliches Duplikat von [Backbone.js Handhabung von Attributen, die Arrays sind] (http://stackoverflow.com/questions/6433795/backbone-js-handling-of-attributes-that-are-arrays) – hindmost

Antwort

1

die dropdownData in der initialize Funktion initialisieren würde ich empfehlen, dropdownData im initialize Verfahren vermieden werden, stattdessen vollständig initialisiert model.defaults hier verwendet wird. Wenn Sie die folgende in der Modelldefinition hinzufügen:

defaults: function() { 
    return { 
    dropdownData: [] 
    }; 
}, 

... dann können Sie den gesamten Code in dem Körper Ihrer initialize Methode entfernen. Das Ergebnis dieser Änderung ist, dass ein instanziiertes Modell entweder den angegebenen Wert (bei Instanziierung) für dropdownDataoder hat. Das Modell wird standardmäßig auf das angegebene leere Array angewendet.

Beachten Sie, dass es wichtig ist, die Funktionsversion von defaults hier zu verwenden. Wenn Sie dies sind stattdessen tun:

defaults: { 
    dropdownData: [] 
}, 

... dann jedes instanziiert Modell nicht mit einem Wert versorgt für dropdownData würde einen Wert für dropdownData teilen. Jede Instanz würde sich auf das exakt gleiche Array beziehen.

+0

Können Sie bitte hilf mir bei dieser Frage: http://stackoverflow.com/questions/38852177/how-to-reload-the-page-as-per-the-dropdown-in-javascript-backbone – Unbreakable