Estoy usando DevExtreme y knockout. Quiero obtener JSON-Data de un servidor y guardarlo en un observable.
Enfoque actual:
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 }Soy nuevo en estos escenarios, así que no estoy seguro si mi enfoque. Para la prueba, estoy llamando a las funciones para obtener los datos JSON manualmente a través de botones, y obtengo los datos necesarios, pero los observables contienen esto:
function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;aloc(c);return c[E]}¿Qué me estoy perdiendo? ¿O es este enfoque una mala práctica en general?
Cómo lo hago es usando el complemento de mapeo Knockout y el comando fromJSON (es posible que deba usar fromJS dependiendo de su formato de datos), esto mapea los datos tal como provienen de la fuente.
function getDataFromJson() { $.ajax({ url: 'http://localhost:56253/test/3?format=json', dataType: 'json', success: function (data) { ko.mapping.fromJSON(data, {}, self.dataArray); } }); }