我想知道为什么没有附加li
。
<! DOCTYPE html>
<html>
<head>
<title>Trying out knockout</title>
<script type="text/javascript" src="jquery-1.4.4.js"></script>
<script type="text/javascript" src="jquery.tmpl.js"></script>
<script type="text/javascript" src="knockout-1.1.2.debug.js"></script>
<script type="text/javascript">
var viewModel ={
personName:ko.observable('Stan Marsh'),
personAge:ko.observable(28),
grades:[
{subject:"Math",grade:'A'},
{subject:"Physics",grade:'B'},
{subject:"Chemistry",grade:'A'},
{subject:"Biology",grade:'A'}
]
};
$(document).ready(function (){
// Apply knockout bindings
ko.applyBindings(viewModel);
// Apply templates
function renderList() {
$("#tmplGrades").tmpl(viewModel.grades).append("#ulGradeList");
};
// Event Wireup
$('#btnViewChanges').click(function(){
var message = "New Name:"+viewModel.personName()+" and New Age:"+ viewModel.personAge();
alert(message);
});
});
</script>
<script id="tmplGrades" type="text/html">
{{each viewModel.grades}}<li>Subject: ${subject} , Grade: ${grade}</li>
</script>
</head>
<body>
<fieldset>
<legend>Person</legend>
<p>
<label for="tbPersonName">Name:</label>
<input type="text" id="tbPersonName" data-bind="value:personName" />
</p>
<p>
<label for="tbAge">Age:</label>
<input type="text" id="tbAge" data-bind="value:personAge" />
</p>
<input type="button" id="btnViewChanges" value="View Changes"/>
</fieldset>
<ul id="ulGradeList">
</ul>
</body>
</html>
答案 0 :(得分:2)
$("#tmplGrades").tmpl(viewModel.grades).append("#ulGradeList");
append
将内容附加到所选元素,而appendTo
将所选内容附加到选择器中指定的元素。
答案 1 :(得分:1)
以下是一个有效的示例:http://jsfiddle.net/rniemeyer/ztgfG/
在您的代码中,模板呈现在一个名为 renderList()的函数中,而这个函数没有被调用。此外,如果将数组传递给模板渲染,它将自动为数组中的每个项执行此操作,因此您不需要使用{{each}}。
JSFiddle上的示例还展示了如何使用模板绑定为您渲染模板。这样你根本不必进行.tmpl调用。
希望这有帮助。