【问题标题】:KnockoutJS mappings, JSON from WebAPIKnockoutJS 映射,来自 WebAPI 的 JSON
【发布时间】:2012-08-29 09:28:49
【问题描述】:

我可以使用以下代码将从 .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 's mapping example 时,我在返回的 Json 上使用 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}]

【问题讨论】:

  • 能否请您添加从服务器返回的 JSON。
  • 您没有为data 变量分配任何东西,对吧?它甚至没有定义。
  • 我在我的代码中,一定是在重写问题时迷失了方向。我现在已经将它分配给一个变量,也尝试了一些变体。

标签: knockout.js asp.net-web-api


【解决方案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);

【讨论】:

  • 谢谢瑞恩,希望你能回答。在进行手动映射方面,我应该在带有 get 请求的函数中还是在其他地方执行此操作?
  • 我个人尝试将我的 AJAX 调用与我的视图模型隔离,并尝试在那一侧处理普通的 JS 对象。然后,在视图模型方面,我使用了一个构造函数,它接收纯数据并使用适当的 observable 构建它。有很多方法可以做到这一点,但这里有一个示例:jsfiddle.net/rniemeyer/Qx4U7。在这种情况下,您可以测试 ViewModel 而无需担心 AJAX 请求和/或将“DataClient”换成处理静态数据的。
猜你喜欢
  • 2013-11-21
  • 2021-09-15
  • 2012-12-26
  • 1970-01-01
  • 2016-01-11
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多