在异步函数中设置可观察值

Set value of observable in asynchronous function

我正在使用 DevExtreme 和淘汰赛。我想从服务器获取 JSON- 数据并将其保存到可观察对象中。

当前方法:

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
}

我是这些场景的新手,所以我不确定我的方法是否正确。为了进行测试,我正在调用函数以通过按钮手动获取 JSON-Data,并且我获得了所需的数据,但是可观察对象都包含以下内容:

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]}

我错过了什么?或者这种方法通常是不好的做法?

我的做法是使用 Knockout Mapping PluginfromJSON 命令(根据您的数据格式,您可能需要使用 fromJS)这会映射数据从源头上。

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