【问题标题】:Set value of observable in asynchronous function在异步函数中设置 observable 的值
【发布时间】:2017-07-27 11:36:57
【问题描述】:

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

目前的做法:

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 数据,并且我得到了所需的数据,但 observables 都包含以下内容:

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

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

【问题讨论】:

  • 你的服务器端技术是什么?
  • @JasonSpake 我正在使用服务堆栈

标签: json ajax knockout.js devextreme


【解决方案1】:

我如何做到这一点是通过使用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);
        }
    });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2019-12-19
    • 2017-11-02
    • 2021-10-03
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多