我能够使用以下代码将从.net WebAPI返回的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);
});
当我尝试使用Ryan Niemeyer 's mapping example时,在我返回的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}]
答案 0 :(得分:1)
您的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);