Knockout Mapping:对象未填充

时间:2013-01-04 02:23:34

标签: knockout.js knockout-mapping-plugin

我正在学习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”对象是“未定义的”。 (Members.dname是其中一个对象属性。)

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

1 个答案:

答案 0 :(得分: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调用是一种承诺模式,因此您实际上不知道响应何时完成。这是一个带有工作示例的code