knockout.js - 带有未定义的 Knockout.js 切换样式
问题描述
我想根据可观察属性切换样式,该属性一开始并不存在。所以它是未定义的。但是在单击它时它会被定义(一个功能),但由于某种原因样式不会改变。我 console.log VM,属性出现在那里。代码如下。
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<script>
function ViewModel_icon() {
self2 = this;
self2.tasks = ko.observableArray([
{
task: ko.observable("Task1"),
time: ko.observable("Saturday, 5 May 2018"),
status: ko.observable("active"),
priority: ko.observable("medium")
}
]);
self2.checkUrgent = function (data){
if(data.urgent === undefined){
data.urgent = ko.observable('true');
}
}
}
var VM1 = new ViewModel_icon();
ko.applyBindings(VM1);
</script>
</head>
<body>
<div id="icon" data-bind='foreach: tasks'>
<i class="fas fa-exclamation-circle" data-bind='click: $parent.checkUrgent, style: {"color" : $data.urgent !== undefined? "red" : "black"}'></i>
</div>
</body>
</html>
解决方案
我看到属性紧急代表一个布尔值;因此,与其不定义它,不如将其初始化为 false,因为只有 2 个有效值(true 或 false)。
看看下面代码的可运行重构。
function ViewModel_icon() {
self2 = this;
self2.tasks = ko.observableArray([
{
task: ko.observable("Task1"),
time: ko.observable("Saturday, 5 May 2018"),
status: ko.observable("active"),
priority: ko.observable("medium"),
urgent: ko.observable(false)
}
]);
self2.checkUrgent = function (data){
if(!data.urgent()){
data.urgent(true);
}
}
}
var VM1 = new ViewModel_icon();
ko.applyBindings(VM1);
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div id="icon" data-bind='foreach: tasks'>
<i class="fas fa-exclamation-circle" data-bind='click: $parent.checkUrgent, style: {"color" : $data.urgent() ? "red" : "black"}'></i>
</div>
推荐阅读
- javascript - 未找到 VueJS Grpc-Web 模块
- java - 带有参数化 bean 类的托管 bean 必须是 @Dependent:class org.apache.cxf.jaxrs.provider.DataSourceProvider
- python - 在使用网络抓取工具时,如何确保一旦第一页被抓取,它就会抓取第二页?
- java - 在 Spring 项目中禁用 Apache Commons 日志记录
- bazaar - git bundle --all 的集市中的等价物是什么?
- javascript - 编写一个返回不同字母组合的函数
- java - 有没有办法只能解析字符串的一部分?
- hyperledger-fabric - 为区块链应用程序制作开发和部署环境。所需工具
- android - 使用 retrofit2 恢复失败的下载
- oracle - 将 Hibernate 与 Spring Boot、Wildfly 和 Oracle DB 结合使用