【问题标题】:having trouble convert getJSON data to model无法将 getJSON 数据转换为模型
【发布时间】:2013-06-20 16:14:40
【问题描述】:

当拥有从 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 未定义; 绑定值:文本:myCompute

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

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

【问题讨论】:

  • 你能显示chargeEliminations函数和数据中的json吗?
  • chargeEliminations 应该是 myTestModels。我为示例更改了所有内容的名称。
  • 还添加了json数据。

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


【解决方案1】:

您没有指定应将数组项转换为 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

希望对你有帮助。

【讨论】:

  • 是的,成功了!只是想知道,有没有办法自动映射它而不将属性传递到模型中?
  • 是的,你可以创建一个 MyTestModel 然后设置它的 modelProperty 属性。但我更喜欢第一种解决方案。
  • 是的,我也更喜欢第一个。谢谢!
猜你喜欢
  • 2021-12-27
  • 2021-02-13
  • 1970-01-01
  • 2018-01-03
  • 2019-09-05
  • 2019-11-10
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多