我使用 KnockoutJS 已经有一段时间了,并且有大约十几个 JQuery Mobile 页面成功运行。但是,我刚刚创建了一个页面,尽管它非常简单,但它拒绝正常工作。我想我会把页面剥离到它的基本要素,然后重新构建它,直到我发现问题......但是基本要素甚至都不起作用!
HTML 是:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="Content/jquery.mobile-1.3.2.min.css" rel="stylesheet" />
</head>
<body>
<div data-role="page" data-theme="b" id="A4LDistancePage">
<div data-role="header" data-position="fixed">
<h1>Details</h1>
</div>
<div data-role="content">
Minutes:
<input id="DurMin" type="number" data-clear-btn="false" data-bind="value: DurationMin" title="Minutes">
Seconds:
<input id="DurSec" type="number" data-clear-btn="false" data-bind="value: DurationSec" title="Seconds">
<div>
Minutes:
<span data-bind="html: DurationMin">0</span><br />
Seconds:
<span data-bind="html: DurationSec">0</span>
</div>
</div>
</div>
<script src="Scripts/jquery-1.10.2.min.js"></script>
<script src="Scripts/jquery.mobile-1.3.2.min.js"></script>
<script src="Scripts/knockout-2.3.0.js"></script>
<script src="A4LDistance.js"></script>
</body>
</html>
对应的JS文件为:
$(document).on('pageshow', '#A4LDistancePage', function () {
function DistanceInfoFn() {
var self = this;
self.DurationMin = ko.observable(15);
self.DurationSecs = ko.observable(1);
}
var dif = new DistanceInfoFn();
ko.applyBindings(dif, $("#A4LDistancePage")[0]);
});
我以这种方式声明 DistanceInfoFn 是因为在整个页面中,我还在应用绑定之前对其调用了一个方法。
如图所示,此页面仅绑定第一个输入。第二个输入字段和两个跨度永远不会绑定。正如我所说,我已经这样做了好几个月了,从来没有遇到过这种奇怪的拒绝绑定变量的情况。我真的可以在这里使用一些帮助,因为我一直在努力解决这个问题并简化了几个小时,看看出了什么问题,却看不出它为什么不起作用!