无法将getJSON数据转换为模型

时间:2013-06-20 16:14:40

标签: jquery knockout.js knockout-2.0 knockout-mapping-plugin

当拥有从getJSON收到的集合时,我似乎无法让Knockout工作。这是我的代码的一个例子

function MyTestModel() {
     this.modelProperty = ko.observable();
     this.myCompute = ko.computed(function () {
          return "test";
});
}

function MyViewModel() {
     var self = this;
     self.myTestModels = ko.observableArray();
}

var vm = new MyViewModel();
ko.applyBindings(vm);

$(document).ready(function () {
$.getJSON("http://MyUrl.com/api/MyController", function (data) {
    var observableData = ko.mapping.fromJS(data);
    var array = observableData();
    vm.myTestModels(array);
     });
  });

 <tbody data-bind="foreach: myTestModels">
    <tr>
        <td data-bind="text: modelProperty" ></td>
        <td data-bind="text: myCompute" ></td>
    </tr>
 </tbody>

 [{"modelProperty":"My Property 1"},{"modelProperty":"My Property 2"}]

modelProperty的数据显示了什么,但Chrome JavaScript控制台显示: 未捕获错误:无法解析绑定。 消息:ReferenceError:未定义myCompute; 绑定值:text:myCompute

看来ko.mapping.fromJS没有将其转换为MyTestModel。我想这是因为淘汰赛不知道MyTestModel但是我不确定如何判断我的模型?

无论如何,谢谢大家的时间!

1 个答案:

答案 0 :(得分:3)

您未指定数组项应转换为MyTestModel。

这会将每个数组项转换为MyTestModel:

$(document).ready(function () {
    $.getJSON("http://MyUrl.com/api/MyController", function (data) {
        var array = ko.utils.arrayMap(data, function (item) {
            return new MyTestModel(item.modelProperty);
        });
        vm.myTestModels(array);
    });

See fiddle

我希望它有所帮助。