我有此代码:
<script>
var viewModel = {};
$.getJSON("URL", function (data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
</script>
我将其绑定在以下代码中:
<!-- ko foreach: { data: object, as: 'object' } -->
<div>
... content (with more data-bindings) ...
</div>
<!-- /ko -->
但是我在控制台中收到这些错误:
未捕获的TypeError:无法处理绑定“ foreach:function(){返回{data:object,as:'object'}}”
消息:无法处理绑定(...)
消息:无法读取属性(...)
我敢肯定,这是因为可观察对象尚未预先定义,而在基因敲除JS试图绑定它们之前,它们根本不存在。
我尝试过:
var viewModel = {
object: null
(and other properties)
};
这:
function viewModel() {
var self = this;
...
}
但这没有帮助。我究竟做错了什么?我知道对此有很多疑问,但是我找不到我的问题的答案。
答案 0 :(得分:0)
您只在 返回异步数据后才应用绑定。这不是理想的方法,但至少可以确保没有由于绑定到初始空对象而引起的问题。
设置视图的方式要求从服务器收到data
才能满足此要求:
object
data.object
的值必须是可迭代的即:这应该有效:
ko.applyBindings({ object: [] })
如果数据是数组,则应将绑定重写为:
<!-- ko foreach: { data: $data, as: 'object' } -->
<div>Bind to object.someProp here</div>
<!-- /ko -->
如果您的数据是对象,例如:{ object: { a: 1 } }
,则可以删除foreach或使用with
绑定。
一旦使它起作用,就应该在开始加载数据之前尝试使用占位符viewmodel应用绑定。这样可以确保在加载过程中呈现出漂亮的UI。