我正在尝试将使用Knockout从Grails控制器返回到表的数据绑定JSON数据。我相信返回的JSON很好:
result
[
Object
class: "project.Person"
firstName: "Bill"
id: 2
lastName: "Fake"
__proto__: Object
,
Object
class: "project.Person"
firstName: "Dale"
id: 3
lastName: "Fake"
__proto__: Object
,
Object
class: "project.Person"
firstName: "Linda"
id: 4
lastName: "Fake"
__proto__: Object
]
这是我的javascript:
var Directory = {
list: ko.observableArray([])
};
var Person = function(id, first, last) {
this.id = ko.observable(id);
this.firstName = ko.observable(first);
this.lastName = ko.observable(last);
};
var loadPeople = function() {
$.ajax({
url: "${createLink(action: "getPeople")}",
type: "post",
contentType: "application/json",
success: function(result) {
for(p in result) {
Directory.list.push(new Person(p.id,p.firstName,p.lastName));
}
ko.applyBindings(Directory);
}
});
};
loadPeople();
最后,我的标记:
<table>
<thead>
<tr><th>Id</th><th>First name</th><th>Last name</th></tr>
</thead>
<tbody data-bind="foreach: list">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: firstName"></td>
<td data-bind="text: lastName"></td>
</tr>
</tbody>
</table>
我查看了类似的问题并尝试list.Person
,Person
,将可观察数组传递给绑定而不是Directory
。调试时,Directory.list()
包含类型为3
的大小为Person
的数组,因此它看起来是正确的。
错误:
未捕获错误:无法解析绑定属性。信息: ReferenceError:未定义id;属性值:text:id
感谢任何帮助。
答案 0 :(得分:1)
你从控制台那里得到了哪个结果块?这不是有效的JSON,但它看起来像一个有效的javascript对象。你真的不应该在这样的调用中应用绑定。它应该发生一次,通常在domReady上。更新后,viewModel会自动更新绑定;这就是重点。
无论如何,我把它扔进了a fiddle,它运行正常。还有其他事情正在破坏你的代码。