我正在学习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是其中一个对象属性。)
谁能告诉我我做错了什么?提前谢谢!
答案 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。