Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js KnockoutJS映射,来自WebAPI的JSON_Knockout.js_Asp.net Web Api - Fatal编程技术网

Knockout.js KnockoutJS映射,来自WebAPI的JSON

Knockout.js KnockoutJS映射,来自WebAPI的JSON,knockout.js,asp.net-web-api,Knockout.js,Asp.net Web Api,我能够使用下面的代码将从.NETWebAPI返回的JSON绑定到一个knockout viewmodel function viewModel() { var self = this; self.temps = ko.observableArray([]); } $(function () { var model = new viewModel(); $.get('../api/Temp/', function (data) { model

我能够使用下面的代码将从.NETWebAPI返回的JSON绑定到一个knockout viewmodel

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);       

});
当我尝试使用时,当我在返回的Json上使用
ko.utils.parseJson
时,我会得到null;当我尝试直接使用
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}]

AJAX调用是异步的,因此它不会立即从函数返回数据:

$.get('../api/Temp/', function (data) { 
        return data;
    });
您可能希望将要写入结果的observable/observableArray传递到函数中,如:

function dataFromServer(temps) {
    $.get('../api/Temp/', function (data) { 
        return temps(data);
    });
}
那么就这样称呼它:

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

请添加从服务器返回的JSON。您没有分配任何
数据
变量,对吗?它甚至没有定义。我在我的代码中,一定是在为这个问题重新编写的过程中迷失了方向。我现在已经把它分配给了一个变量,我也尝试了一些变化。谢谢Ryan,希望你能回答。就手动映射而言,我应该在get请求函数中还是在其他地方这样做?我个人尝试将AJAX调用与视图模型隔离开来,并尝试在这方面处理普通JS对象。然后,在视图模型方面,我使用了一个构造函数,它接收普通数据并使用适当的观察值构建它。有很多方法可以做到这一点,但这里有一个示例:。在这种情况下,您可以测试ViewModel,而不用担心AJAX请求和/或将“DataClient”替换为处理静态数据的客户端。