我复制了一个knockoutjs的例子:
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<h2>Participants</h2>
Here are the participants:
<div data-bind="template: { name: 'person-template', data: buyer }"></div>
<div data-bind="template: { name: 'person-template', data: seller }"></div>
<script id="person-template" type="text/html">
<h3 data-bind="text: name"></h3>
<p>Credits: <span data-bind="text: credits"></span></p>
</script>
<script type="text/javascript">
function MyViewModel() {
this.buyer = { name: 'Franklin', credits: 250 };
this.seller = { name: 'Mario', credits: 5800 };
}
ko.applyBindings(new MyViewModel());
</script>
</html>
当我将jQuery更新为版本1.9 时,我遇到以下错误:
Uncaught TypeError: Object function (e,t){return new st.fn.init(e,t,X)} has no method 'clean'
如果有人能解释这个bug是在jQuery还是KO中,我会很感激。
答案 0 :(得分:28)
原因
您没有使用最新版本的Knockout。以前的版本2.2.0与jQuery 1.9.x和on不兼容。见this Knockout dev thread:
Knockout 2.2.0使用的是不推荐使用的jQuery.clean(),但在1.9版本中不存在。
这意味着Knockout 2.2.0正在调用未定义的jQuery方法,从而触发您指定的JS错误。
<强>解决方案强>
答案 1 :(得分:8)
将Knockout更新为2.2.1解决了我的问题:
所以只需改变:
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>
要:
<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
它会起作用。