我是学习Knockout JS的过程。我正在阅读John Papa关于Pluralsight关于Knockout和Javascript的一些教程。
<div data-bind="text: people().length" class="label">
部分似乎没有问题。然而,foreach绑定似乎有问题。
我尝试过的事情:
$(function () {
var Person = function (name) {
this.name = ko.observable(name);
};
var viewModel = (function () {
var p1 = new Person('Da Vinci');
var p2 = new Person('Michangelo');
var people = ko.observableArray([p1, p2]);
return {
people: people
};
})();
ko.applyBindings(viewModel);
});
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Knockout</title>
<link href="../Content/bootstrap.css" rel="stylesheet" />
</head>
<body>
<h1>Hello Knockout!</h1>
<section>
Records:
<div data-bind="text: people().length" class="label">
<ul data-bind="foreach: people">
<li>
<span data-bind="text: name"></span>
</li>
</ul>
</div>
</section>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js"></script>
<script src="../Js/ViewModel/AuthorCart.js"></script>
</body>
</html>
我得到了以下结果,但我期待两个人的名字('Da Vinci'和'Michangelo')出现在记录下面。
记录:2
答案 0 :(得分:3)
您在包含div上的text
绑定会覆盖元素的子元素,因此foreach
已消失。
您可能希望先关闭容器:
<div data-bind="text: people().length" class="label"></div>
<ul data-bind="foreach: people">
<li>
<span data-bind="text: name"></span>
</li>
</ul>
答案 1 :(得分:2)
<div data-bind="text: people().length" class="label">
<ul data-bind="foreach: people">
<li>
<span data-bind="text: name"></span>
</li>
</ul>
</div>
绑定计数时,用“2”替换div的全部内容,这可能包括覆盖其中包含的ul,以便永远无法绑定。
你可以试试这个:
<span data-bind="text: people().length" class="label"></span>
<ul data-bind="foreach: people">
<li>
<span data-bind="text: name"></span>
</li>
</ul>