“未捕获的 TypeError:无法处理绑定”与 KnockoutJS
Posted
技术标签:
【中文标题】“未捕获的 TypeError:无法处理绑定”与 KnockoutJS【英文标题】:"Uncaught TypeError: Unable to process binding" with KnockoutJS 【发布时间】:2019-03-30 22:11:55 【问题描述】:我有这个代码:
<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 -->
但我在控制台中收到这些错误:
未捕获的类型错误:无法处理绑定“foreach: function()return data:object, as:'object' ”
消息:无法处理绑定 (...)
消息:无法读取属性 (...)
我确定这是因为 observable(s) 不是预定义的,并且当 knockoutJS 尝试绑定它们时,它们根本不存在。
我试过这个:
var viewModel =
object: null
(and other properties)
;
还有这个:
function viewModel()
var self = this;
...
但这无济于事。我究竟做错了什么?我知道对此有很多问题,但我找不到我的问题的答案。
【问题讨论】:
【参考方案1】:您只是在异步数据返回后应用绑定。这并不理想,但至少可以确保不会因绑定到初始空对象而导致问题。
您的视图设置方式要求您从服务器接收的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
绑定。
一旦你得到这个工作,你应该在开始加载数据之前尝试使用占位符视图模型应用绑定。这样可以确保在加载期间呈现漂亮的 UI。
【讨论】:
以上是关于“未捕获的 TypeError:无法处理绑定”与 KnockoutJS的主要内容,如果未能解决你的问题,请参考以下文章