Knockout开发中文API系列5–绑定关键字

2023-10-28 05:38

本文主要是介绍Knockout开发中文API系列5–绑定关键字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目的

Visible绑定通过绑定一个值来确定DOM元素显示或隐藏

示例
  1. <div data-bind="visible: shouldShowMessage">   
  2.     You will see this message only when "shouldShowMessage" holds a true value.   
  3. </div>   
  4.   
  5. <script type="text/javascript">   
  6.     var viewModel = {   
  7.         shouldShowMessage: ko.observable(true// Message initially visible   
  8.     };   
  9.     viewModel.shouldShowMessage(false); // ... now it's hidden   
  10.     viewModel.shouldShowMessage(true); // ... now it's visible again   
  11. </script>  
参数

主参数

当参数设置为一个假值(例如bool型值false、整型值0、null或者undefined)时,该绑定会设置yourElement.style.display为 none,让元素隐藏。它的优先级高于任何你在CSS中定义的隐藏样式。

当参数设置为一个真值(例如bool型值true、不等于null、Object对象或数组)时,该绑定会去掉yourElement.style.display值,让元素显示。

注意,任何你在CSS中定义的样式会立即应用生效。

如果参数是一个observable值,visible绑定使得元素的visible状态随着参数值的变化而变化。如果参数不是observable值,visible绑定仅仅会设置元素visible状态一次,以后不会再更新。

其他参数

注:使用函数或表达式来控制元素显示隐藏

你可以选择使用JavaScript函数或者表达式作为参数值。这样的话,KO将会运行你的函数或者表达式,返回的结果来控制元素显示或者隐藏。

例如:

  1. <div data-bind="visible: myValues().length > 0">   
  2.     You will see this message only when 'myValues' has at least one member.   
  3. </div>   
  4. <script type="text/javascript">   
  5.     var viewModel = {   
  6.         myValues: ko.observableArray([]) // Initially empty, so message hidden   
  7.     };   
  8.     viewModel.myValues.push("some value"); // Now visible   
  9. </script>  
目的

Text绑定主要是让DOM元素显示参数值。

通常情况下,该绑定在<span>和<em>这样的元素上非常有用,而实际上你可以绑定任何元素。

示例
  1. Today's message is: <span data-bind="text: myMessage"></span>   
  2.  
  3. <script type="text/javascript">   
  4.     var viewModel = {   
  5.         myMessage: ko.observable() // Initially blank   
  6.     };   
  7.     viewModel.myMessage("Hello, world!"); // Text appears 
  8. </script>  
参数

主要参数

Knockout将参数值设置为元素内容。元素之前的内容将会被覆盖。

如果参数是一个observable值,text绑定将会在值变化时更新元素text内容。如果参数不是observable值,text绑定仅仅会设置元素内容一次,以后不会再更新。

如果你传入的不是一个值或者一个字符串(比如:你传入一个对象或者数组)那么显示的文本将是yourParameter.toString()的结果。

其他参数

注意事项

注1:使用函数或表达式来决定text值

如果你想text值可编程化,一种选择是创建计算属性,然后在运算函数中编码决定text中显示什么。

例如:

  1. The item is <span data-bind="text: priceRating"></span> today.   
  2.   
  3. <script type="text/javascript">   
  4.     var viewModel = {   
  5.         price: ko.observable(24.95)   
  6.     };   
  7.     viewModel.priceRating = ko.computed(function() {   
  8.         return this.price() > 50 ? "expensive" : "affordable";   
  9.     }, viewModel);   
  10. </script>  

现在,text值将会在“expensive”和“affordable”之间选择,而这主要取决于“price ”的变化。
然而,假如你按照示例中的方式你则不需要创建计算属性。你可以传入任意的JavaScript表达式进行text绑定。

例如:

  1. The item is <span data-bind="text: price() > 50 ? 'expensive' : 'affordable'"></span> today.  

注2:关于HTML编码

由于text绑定是利用元素的text节点属性来设置文本值,你可以很安全的设置任何内容而不用担心HTML和脚本注入风险。例如,如果你输入以下内容:

  1. viewModel.myMessage("<i>Hello, world!</i>");  

它将不会显示一个斜体文本,而是按原样进行标签输出。

如果你想设置一个HTML内容,你可以参数HTML绑定。

注3:使用“text”而没有一个容器元素

有时你可能需要使用Knockout在不使用多余的元素的情况下通过text绑定来设置文本内容。例如,在option元素中是不允许存在其他元素的,所以下面的绑定是无法正常工作的。

  1. <select data-bind="foreach: items">   
  2.     <option>Item <span data-bind="text: name"></span></option>   
  3. </select>  

为了解决这个问题,你可以使用容器语法,它基于一个注释元素。

  1. <select data-bind="foreach: items">   
  2.     <option>Item <!--ko text: name--><!--/ko--></option>   
  3. </select>  

<!--ko--> 和<!--/ko--> 注释标记作为起始和结束符,定义一个“虚拟元素”,里面包含了标记,Knockout能够识别这种虚拟元素语法和绑定作为你需要的容器元素而存在。

注4:一个关于IE6 白空格

IE6有一个奇怪的现象,如果span有空格的话,它会变成一个空span,如果你编写以下代码,Knockout不会起任何作用。

  1. Welcome, <span data-bind="text: userName"></span> to our web site.  

IE6不会显示span中间的那个空格,如果你想避免这个问题,你可以在<span>中输入任意内容。比如:

  1. Welcome, <span data-bind="text: userName">&nbsp;</span> to our web site.  

其他浏览器或者版本较新的IE浏览器不会出现这个问题。

=========================================================
目的

Html绑定会让关联的DOM元素显示你参数指定的HTML内容。

通常当你的ViewModel中值是HTML标记字符串时,使用html绑定来render是非常有用的。

示例
  1. <div data-bind="html: details"></div>   
  2.     
  3. <script type="text/javascript">   
  4.     var viewModel = {   
  5.         details: ko.observable() // Initially blank   
  6.     };   
  7.     viewModel.details("<em>For further details, view the report <a href='report.html'>here</a>.</em>"); // HTML content appears    
  8. </script>  
参数

主要参数

KO会使用你的参数值来设置元素的innerHTML 属性,任何之前的内容将会被重写掉。

如果参数是一个监控属性值,当这个监控属性值发生变化的时候html绑定会更新绑定元素的内容。如果这个参数是非监控属性值,那么html仅绑定元素内容一次并且以后不再去更新它。

如果你传入的参数内容不是字符串或者数字(例如对象或者数组),那么innerHTML 将会等价于yourParameter.toString()

其他参数

无。

注意:关于HTML编码

由于HTML绑定使用的是innerHTML来设置元素内容,那么你需要注意不要使用不安全的HTML内容,因为这有可能引入脚本注入攻击的风险,如果你不确定它是否安全(比如显示用户输入的内容),请使用text绑定,因为text绑定只设置元素的text内容innerText。

 

==================================================

 

目的

Css绑定主要是给DOM元素对象添加或移除一个或多个css class类名。这非常有用,比如当值变成负数的时候用红色高亮显示。

注意:如果你不想应用CSS class,而是采用style属性的话,请采用style绑定。

静态classes示例
  1. <div data-bind="css: { profitWarning: currentProfit() < 0 }">   
  2.    Profit Information   
  3. </div>   
  4.     
  5. <script type="text/javascript">   
  6.     var viewModel = {   
  7.         currentProfit: ko.observable(150000) // Positive value, so initially we don't apply the "profitWarning" class  
  8.     };   
  9.     viewModel.currentProfit(-50); // Causes the "profitWarning" class to be applied   
  10. </script>  

currentProfit 的值小于0的时候将会给元素绑定上profitWarning 样式,当值大于0时移除样式。

动态classes示例
  1. <div data-bind="css: profitStatus">   
  2.    Profit Information   
  3. </div>   
  4.     
  5. <script type="text/javascript">   
  6.     var viewModel = {   
  7.         currentProfit: ko.observable(150000)   
  8.     };   
  9.     
  10.     // Evalutes to a positive value, so initially we apply the "profitPositive" class   
  11.     viewModel.profitStatus = ko.computed(function() {   
  12.         return this.currentProfit() < 0 ? "profitWarning" : "profitPositive";   
  13.     }, viewModel);   
  14.     
  15.     // Causes the "profitPositive" class to be removed and "profitWarning" class to be added   
  16.     viewModel.currentProfit(-50);   
  17. </script>  

currentProfit 值是positive的时候将会给元素绑定上profitWarning 样式,其他情况下将会绑定profitWarning 样式。

参数

主要参数

如果你使用静态的CSS class名称,你可以传递一个属性名是CSS class名,值是true或者false的JavaScript对象来决定DOM元素是否应用class。

你可以一次使用多个CSS class。比如,你的view model含有一个属性isSevere

  1. <div data-bind="css: { profitWarning: currentProfit() < 0, majorHighlight: isSevere }">  

你可以在同一个条件下设置多个CSS class,名称用引号引起来。比如:

  1. <div data-bind="css: { profitWarning: currentProfit() < 0, 'major highlight': isSevere }">  

非bool值会被解析成bool值,比如:0或null会解析成false,像21、 non-null这样的对象会解析成true。

如果你的参数是observable 值,此绑定会在observable 值发生变化的之后添加或移除Css class。如果参数不是observable 值,那么CSS class只会添加或移除一次,以后不再变化。

如果你想使用动态Css class名称,你可以传递一个与Css class名称对应的字符串给你要添加的元素。如果参数是observable 值,绑定会移除元素之前添加的所有css class,并将对应的observable 新值添加给元素。
通常,你可以使用任意JavaScript表达式或者函数作为参数值。KO会自动执行它们通过返回的值来确定元素待添加或移除的Css class。

附加参数

注意:应用的Css class名称不能是不合法的JavaScript命名

如果你要添加的Css class名my-class,你不能这样写

  1. <div data-bind="css: { my-class: someValue }">...</div>  

因为my-class不是一个合法的JavaScript命名,解决方案是:在名称两边加上引号作为字符串使用,这样的命名是合法的JavaScript对象。例如:

    1. <div data-bind="css: { 'my-class': someValue }">...</div>  

这篇关于Knockout开发中文API系列5–绑定关键字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/291047

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta