1

我正在学习 Knockout,无法让 Knockout.mapping.fromJS 工作。这是我的代码:

$.getJSON("data/status.json", function(data) {
        var members = ko.mapping.fromJS(data);
});
ko.applyBindings(members);

我正在使用模板。这是模板:

<script type="text/html" id="membersTemplate">
    <li data-bind="text: members.dname"></li>
</script>

并且标记...

<div id="members">
<h2>Members</h2>
<ul data-bind="template: {name: 'membersTemplate', foreach: members}"></ul>
</div>

JSON 数据正确加载,但“成员”对象是“未定义的”。(Members.dname 是众多对象属性之一。)

谁能告诉我我做错了什么?提前致谢!

4

1 回答 1

0

非常高兴:您的members变量超出范围,因此在我们的 AJAX 调用完成后它会丢失。你想要这样的东西。

$.ajax({url:"/echo/json/", data:json, type:"POST", success:function(data) {
  var viewModel = ko.mapping.fromJS(data);
  ko.applyBindings(viewModel)
}});

因此,您在 AJAX 调用或类似的范围内应用绑定。

var self = this
self.members = ko.observableArray([]);
$.ajax({url:"/echo/json/", data:json, type:"POST", success:function(data) {
  var members = ko.mapping.fromJS(data);
  self.members(members);
}});
// do the binding elsewhere

它将您的响应绑定在一个闭包中。请记住,AJAX 调用是一种承诺模式,因此您真的不知道响应何时完成。这是一个带有工作示例的代码。

于 2013-01-04T02:59:44.930 回答