KnockoutJS映射,JSON从的WebAPI(KnockoutJS mappings, JSO

2019-09-21 21:37发布

我能够绑定JSON使用下面的代码从.NET的WebAPI返回到淘汰赛视图模型。

function viewModel() {
    var self = this;
    self.temps = ko.observableArray([]);
}

$(function () { 
    var model = new viewModel();

    $.get('../api/Temp/', function (data) { 
        model.temps(data);
    });

    ko.applyBindings(model);       

});

当我尝试使用瑞恩·尼迈耶的映射例子 ,我使用的时候变得空ko.utils.parseJson在我返回的JSON,当我尝试使用ko.utils.arrayMap直接我越来越不确定。

我也挣扎,如果我尝试采取GET请求到一个单独的功能,下面,我的数据绑定工作停止

function dataFromServer() {
    $.get('../api/Temp/', function (data) { 
        return data;
    });
}

$(function () { 
    var model = new viewModel();
    var data = dataFromServer();
    model.temps(data);

    ko.applyBindings(model);       

});

返回的JSON从服务器:

[{"Id":1,"Name":"Test1","TypeId":100,"Temp":21.0,"Peak":true},{"Id":2,"Name":"Test2","TypeId":100,"Temp":21.0,"Peak":true},{"Id":3,"Name":"Test3","TypeId":101,"Temp":21.0,"Peak":true}]

Answer 1:

你的AJAX调用是异步的,所以它不会从这里你的函数立即返回您的数据:

$.get('../api/Temp/', function (data) { 
        return data;
    });

你可能会想,你想写的结果可观察/ observableArray传递给到你之类的函数:

function dataFromServer(temps) {
    $.get('../api/Temp/', function (data) { 
        return temps(data);
    });
}

然后调用它像:

var model = new viewModel();
dataFromServer(model.temps);


文章来源: KnockoutJS mappings, JSON from WebAPI