我正在看来自淘汰赛站点的“任务列表”示例,并且在理解如何设置特定值时遇到问题。
创建了一个名为Task的javascript对象。它具有通过this.isDone = ko.observable(data.isDone);
分配的'isDone'布尔属性。
我的问题是我不了解如何将true或false的值传递给此属性。没有迹象表明在对象的初始创建中传递了它,并且javascript文件中唯一使用该值的其他地方是:
self.incompleteTasks = ko.computed(function() {
return ko.utils.arrayFilter(self.tasks(), function(task) {
return !task.isDone()
});
但这仅适用于任务列表底部的总数-可以将其完全删除,并且该应用程序仍可以正常运行(当然,您将没有总数)。
但是,在标记中,复选框输入正在使用'isDone'值:
<input type="checkbox" data-bind="checked: isDone" />
复选框选中时,复选框值本身(可能为真)是否有可能传递给“ isDone”?
通常,我希望'isDone'已经需要具有与之关联的'true'或'false'值才能在标记中使用,但是我看不到如何分配该值。
这是上下文的完整代码:
function Task(data) {
this.title = ko.observable(data.title);
this.isDone = ko.observable(data.isDone);
}
function TaskListViewModel() {
// Data
var self = this;
self.tasks = ko.observableArray([]);
self.newTaskText = ko.observable();
self.incompleteTasks = ko.computed(function() {
return ko.utils.arrayFilter(self.tasks(), function(task) {
return !task.isDone()
});
});
// Operations
self.addTask = function() {
self.tasks.push(new Task({ title: this.newTaskText() }));
self.newTaskText("");
};
self.removeTask = function(task) { self.tasks.remove(task) };
}
ko.applyBindings(new TaskListViewModel());
...这是标记:
<!DOCTYPE html>
<html>
<head>
<title>Knockout Practice</title>
</head>
<body>
<h3>Tasks</h3>
<form data-bind="submit: addTask">
Add task: <input data-bind="value: newTaskText" placeholder="What needs to be done?" />
<button type="submit">Add</button>
</form>
<ul data-bind="foreach: tasks, visible: tasks().length > 0">
<li>
<input type="checkbox" data-bind="checked: isDone" />
<input data-bind="value: title, disable: isDone" />
<a href="#" data-bind="click: $parent.removeTask">Delete</a>
</li>
</ul>
You have <b data-bind="text: incompleteTasks().length"> </b> incomplete task(s)
<span data-bind="visible: incompleteTasks().length == 0"> - it's beer time!</span>
<script type='text/javascript' src='javascript/jquery-1.6.4.js'></script>
<script type='text/javascript' src='javascript/jquery-tmpl.js'></script>
<script type='text/javascript' src='javascript/knockout-2.0.0.js'></script>
<script type='text/javascript' src='javascript/myKnockoutCode.js'></script>
</body>
</html>
最佳答案
checked
绑定大致确定是true还是false。这意味着0,空字符串,null,false,NaN和undefined将被视为false。
因此,isDone
实际初始化为false并不重要。
选中或取消选中该复选框时,checked
绑定会将其正确设置为true
或false
。