3

我可以使用以下代码将从 .net WebAPI 返回的 JSON 绑定到淘汰视图模型。

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 的映射示例时,我在返回的 Json 上使用时得到 null,ko.utils.parseJson而当我尝试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}]
4

1 回答 1

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);
于 2012-08-29T13:36:46.503 回答