Knockout.js KnockoutJS映射,来自WebAPI的JSON
我能够使用下面的代码将从.NETWebAPI返回的JSON绑定到一个knockout viewmodelKnockout.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
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”替换为处理静态数据的客户端。