knockoutjs介绍(译文)
介绍
knockoutjs 是一个能够帮助你创建一个具有干净基础数据模型的丰富、响应的显示和编辑器用户界面的一个JavaScript库。
任何时候,动态更新UI的部分(例如,根据用户的行为而改变或当外部数据源改变时),KO对象可以帮助你更简单和更容易地实现它。
标题特点
优雅的依赖跟踪
每当数据模型发生变化时,自动更新UI的对应数据改动部分。
声明绑定
将UI部分连接到数据模型的简单且明显的方法,你可以使用任意嵌套的绑定上下文来构造复杂的动态UI界面。
简单的可扩展性
实现自定义行为作为新的声明绑定,以便只在几行代码中重复使用。
额外的好处
纯javaScript库
与任何服务器或客户端技术一起工作,可以在现有Web应用程序的顶部添加,而不需要更改主要的架构。
精细
压缩后大约13KB大小。
在任何主流浏览器上工作
IE6+,Firefox2+,Chrome,Safari,Edge,其他。
全面的规范套件
开发BDD模式,意味着其正确的功能可以很容易地在新浏览器和平台上得到验证。
熟悉Ruby on Rails、ASP、.NET、MVC或者其他MV视图模型技术的开发人员可以将MVVM视为具有声明语法的MVC的实时形式。从另外一个意义上说,你可以把KO对象看作是一个通用的方式来让UI编辑JSON格式的数据的功能型对象,它将全面为你服务。
怎么使用它?
最快也是最有趣的方法是通过交互教程。一旦你掌握了基础知识,就去探索实际的例子,然后在你自己的项目中进行尝试。
KO对象是否打算与JQuery(或者Prototype等)竞争呢?
每个人都喜欢JQuery,它使我们过去不得不忍受的笨拙的、不一致的DOM API的杰出替代品。
Jquery是在页面中操纵元素和事件处理程序的一种很好的初级方式,而KO对象解决了一个不同的问题。
考虑一个实例:你正在显示一个项目列表,列出该列表中的项目数据量,并希望只有在少于5个项目时启用一个添加按钮,
可能项目的数量在某个范围内显示,并且当用户添加一个项目时,你必须记住更新该跨度的文本。当tr的数量为5时,你还必须记住禁用添加按钮。之后你还需要实现一个删除按钮,必须确定何时点击那个DOM元素。
Knockout不同之处?
对KO来说实现上述功能要容易很多。它可以让你在复杂的范围内扩展,而不用担心引入不一致。只需将项目表示为javaScript数组,然后使用foreach绑定将此数组转换为表或者div集合。每当数组改变时,UI就同步更新(你不需要知道如何注入新的tr元素或者在哪里注入它们),其余UI保持同步。
例如,可以声明性绑定一个跨度来显示项目的数量如下:
There are <span data-bind="text: myItems().length"></span> items
就是这样,你不必编写代码来更新它;当myItems数组更改时,它自己更新代码。
类似地,让添加按钮根据项目数量启用或者禁用,只需写:
<button data-bind="enable: myItems().length < 5">Add</button>
之后,当你被要求实现删除功能时,你不必弄清楚它必须与那些UI元素的交互关系,只需更改基础数据模型即可。
总结:KO不与Jquery或者类型的低级DOM API竞争。KO对象提供了一种将数据模型链接到UI的互补的、高级的方式。
KO对象本身不依赖于Jquery,但是你当然可以同时使用Jquery,而且如果你想要动画过度之类的东西,这通常需要用到它。
原文地址:http://knockoutjs.com/documentation/introduction.html
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:543120397 我们一起学Java!
knockoutjs介绍(译文)相关推荐
- High-Frequency Strategies 高频交易策略介绍(译文)
High-Frequency Strategies 高频交易策略介绍(译文) Most high-frequency momentum strategies involve extracting i ...
- MVVM js 库JsRender/JsViews和knockoutjs介绍
MVVM概念 MVVM的解释有很多,抛开抽象的描叙我想最实用的一点是把UI和数据绑定,事件做成了一种静态契约,也就是模版,同时UI和数据可以独立动态变化.WPF,SL相对Winfrom和asp.net ...
- KnockoutJs简单入门知识讲解
1.Knockoutjs介绍 Knockout是一款很优秀的JavaScript库,KnockoutJS是一款MVVM前端框架,从框架的模式中我们可以看出,在页面中需要有三个必须的元素:M(模型).V ...
- python 浏览器自动化测试,python中使用chrome进行自动化测试,浏览器变量设置
你必须知道的HTTP错误 发送网络请求有时失败,分析一下响应行,在响应的响应行内,你会发现响应行由三部分组成,用空格来隔开,HTTP/1.1 404 NOT FOUND,第一个是响应的HTTP的版本, ...
- 【亲测】RMI之Hassion
一.RMI RMI(Remote Method Invocation,远程方法调用)是Java在JDK1.2中实现的, Java RMI 支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对 ...
- Java使用apache.http.client.fluent快速构建HTTP请求
相关包 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><depend ...
- Large Movie Review Dataset v1.0
大型电影评论数据集v1.0 目录 Large Movie Review Dataset v1.0大型电影评论数据集v1.0 数据集下载地址 数据集介绍译文 原文 数据集下载地址:http://ai.s ...
- ResNext残差结构理解
ResNext 本人对论文的翻译:翻译 网络对比ResNet 图1. 上图左结构为ResNet的一个block 右结构为ResNext的一个block,cardinality(基数)=32,左右结构复 ...
- Python 时间库 之 标准模块time
Python中的时间库有很多,特别推荐的有:六款Python 时间&日期库推荐 在学习Python的时间库时,应最先学习Python标准库中的模块:Time.Calendar.datetime ...
最新文章
- 网络框架 - 收藏集 - 掘金
- 习题4-1 求奇数和 (15 分)
- iTOP-4412开发板驱动lcd显卡以及linux开机log的修改方法
- MATLAB从入门到精通系列之matlab常见问题集锦-(一)
- html css 磁贴,使用JS配合CSS实现Windows Phone中的磁贴效果
- TeamCity和GitLab整合
- oracle json字符串转数组,json字符串转化成json对象(原生方法)
- 如何在 ASP.Net Core 中使用 Consul 来存储配置
- Java 25 岁生日快乐!
- Cannot attach the file as database 'membership'.
- Hadoop核心之HDFS 架构设计
- java string是final_关于java:String和Final
- 基于链表结构实现二路归并排序详解(C++实现)
- Windows 安装maven
- 应用程序正常初始化失败0xc0150002 错误
- On-Ramp算法参考资料
- 拒做背锅侠!如何利用网站性能优化驱动产品体验提升
- 获取微信用户的openId
- php实现服务器访问统计,服务器端统计网站总访问人数
- 谷歌浏览器的timeline工具的使用