2017-03-07 2 views
1

einstellen Ich verwende DevExtreme und Knockout. Ich möchte JSON-Daten von einem Server holen und in eine Observable speichern.Wert der beobachtbaren in asynchronen Funktion

Aktueller Ansatz:

var dataArray = ko.observableArray(); 
var dataId = ko.observable(""); 

MyApp.overview = function (params) { 
    "use strict"; 

    var viewModel = { 
     [...] 
    } 

    return viewModel; 
}; 

function getDataFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      var entries = $.map(data, function (item) { return new entry(item) }); 
      // first entry is ID 
      for (var i = 1; i < entries.length; i++) { 
       dataArray.push(entries[i]); 
      } 
     } 
    }); 
} 

function getIDFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      dataId(data.ID); 
     } 
    }); 
} 

function entry(data) { 
    this.A = data.A, 
    this.B = data.B, 
    this.C = data.C 
} 

Ich bin neu in diesen Szenarien, also bin ich nicht sicher, ob meine apporach. Für die Prüfung, bin ich ruft die Funktionen der JSON-Daten manuell über Tasten zu bekommen, und ich erhalte die benötigten Daten, aber die Observablen beide enthalten diese:

function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]} 

Was bin ich? Oder ist diese Herangehensweise generell schlecht?

+0

Was ist Ihre Serverseite Tech? –

+0

@JasonSpake Ich benutze Servicestack – Marcel

Antwort

1

Wie ich tut, ist es durch den Knockout Mapping Plugin verwenden und den fromJSON Befehl (möglicherweise müssen fromJS verwenden, um auf Ihrem Datenformat abhängig) diese bilden die Daten, wie es aus der Quelle kommt.

function getDataFromJson() { 
    $.ajax({ 
     url: 'http://localhost:56253/test/3?format=json', 
     dataType: 'json', 
     success: function (data) { 
      ko.mapping.fromJSON(data, {}, self.dataArray); 
     } 
    }); 
} 
Verwandte Themen