Knockout开发中文API系列2–创建数据模型和监控属性

2023-10-28 05:38

本文主要是介绍Knockout开发中文API系列2–创建数据模型和监控属性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Knockout开发中文API系列2–创建数据模型和监控属性

Observables,这个词的翻译来自汤姆大叔,对于部分翻译不是很准确的,欢迎大家留言,以得到更好的翻译。

Knockout是建立在以下3个核心功能之上的:

  • 1、    属性监控与依赖跟踪
  • 2、    声明式绑定
  • 3、    模版机制

在本节中,我们将学习3个核心里面的第一个。但在这之前,先让我们学习一下MVVM设计模式和View Model的概念。

MVVM和View Models

Model-View-View Model (MVVM)是一种创建用户界面的设计模式。通过它只要将UI界面分成以下3个部分,就可以使复杂的界面变得简单:

1、Model,用于存储你应用程序数据,这些数据表示你业务领域的对象和数据操作(例如:银行可以进行资金转账),并且独立于任何界面。当使用KO的时候,通常是使用Ajax向服务器请求数据来读写这个数据模型。

2、View Model,纯粹用于描述数据内容和页面操作的数据模型。例如,如果你想实现一个列表编辑器,你的ViewModel(数据模型)就是项目清单对象和你所暴露出来的添加和删除列表项的方法。

注意:这不是UI本身,它不具有任何按钮和显示样式的概念。这不是持久化的数据模型—它仅是用户当前使用的未保存的数据。当使用KO时,你的View Model(数据模型)是纯粹的不包含HTML知识的JavaScript对象,保持View Model(数据模型)抽象在使用时可以保持简单,因此你可以更简单的操作管理更复杂的行为。

3、View,代表View Model状态的一个可见、互动的UI界面。它主要用于显示View Model的数据信息、发送用户命令(例如,当用户点击按钮)以及在View Model发生变化时保持自动更新。

使用KO时,你的View层主要就是简单的将HTML文档声明式的绑定到View Model,将它们关联起来。另外,你也可以利用模版从View Model获取数据动态生成HTML。

使用KO创建一个View Model,仅仅只需要声明一个JavaScript对象,例如:

  1. var myViewModel = {   
  2.     personName: 'Bob',   
  3.     personAge: 123   
  4. };  

你可以创建一个简单的视图声明式绑定到这个View Model上,例如,下面的代码显示personName的值:

  1. The name is <span data-bind="text: personName"></span>  
激活Knockout

data-bind属性并不是HTML固有对象,但使用它是完全正确的(这是完全遵守HTML5,尽管有验证器指出这是一个无法验证的属性,但在HTML4当中使用是不会造成任何问题的)。但浏览器并不知道它是什么意思,所以你需要激活Knockout来使其生效。

激活Knockout,只需要将下面的代码加到<script>标签中就可以了:

  1. ko.applyBindings(myViewModel);  

你可以将这个代码放到文档底部,或者放在顶部包含在DOM处理完成诸如JQuery的$函数方法中。

以上操作完成后,你的View(页面)显示的内容等同于编写以下HTML代码:

  1. The name is <span>Bob</span>  

下面介绍下ko.applyBindings操作时使用的是什么样的参数:

第一个参数是你想激活KO时用于声明式绑定的View Model对象;

第二个参数(可选),你可以使用第二个参数来设置要使用data-bind属性的HTML元素或容器。例如:

  1. ko.applyBindings(myViewModel, document.getElementById('someElementId'))  

它限制了只有ID为someElementId的元素才能激活使用KO功能,当你在一个页面中声明了多个View Model来绑定不同的界面区域时,这样限制是很有好处的。

 

在上节中,我们知道了如果创建一个ViewModel,并且如何激活Knockout,本节中,将学习监控属性相关内容。

Observables

上面,你已经看到如何创建一个基本的数据模型以及如何利用绑定来显示它的属性。但是KO最重要的一个属性就是当View Model发生变化时能够自动的更新UI界面。KO是如何能够知道你的View Model已经发生改变了呢?答案是:你需要将你的model属性声明成observable的, 因为它是非常特殊的JavaScript 对象,能够通知用户它的改变以及自动检测依赖关系。

例如:重写上述例子中的View Model为以下代码:

  1. var myViewModel = {   
  2.     personName: ko.observable('Bob'),   
  3.     personAge: ko.observable(123)   
  4. };  

你根本不需要对View进行更改,所有的data-bind语法依然正常工作。所不同的是,现在它能够自动检测变化,并通知它自动更新界面(View)。

Reading and writing observables

并不是所有的浏览器都支持JavaScript的getters and setters (比如IE),所以,为了兼容,ko.observable监控的对象都是方法。

1、读取当前监控的属性值,只需要直接调用observable(不需要参数),在这个例子当中,调用myViewModel.personName()将会返回'Bob',调用myViewModel.personAge() 将会返回'123'

2、写一个新值到监控属性上,调用observable方法,将要写的值作为一个参数传入即可。例如,调用myViewModel.personName('Mary') 将会把名称改变成 'Mary'

3、一次性改变Model对象监控的多个属性值,你可以使用链式方法。例如:myViewModel.personName('Mary').personAge(50) 将会把名称改变成'Mary'将年龄设置为 50.

监控属性最重要的一点就是可以随时监控,也就是说,其他代码可以告诉它哪些是需要通知发生变化的。这就是为什么KO会有如此多的内置绑定语法。所以,当你在页面中编写data-bind="text: personName"text 会绑定注册到自身,当personName发生变化时,它能够立即得到通知。

当你通过调用 myViewModel.personName('Mary') 将名称的值改变成为'Mary'时,text绑定会自动更新新值到其对应的DOM对象元素上,这就是为什么改变数据模型能够自动刷新View页面。

监控属性的显示订阅

通常情况下,你不需要手工订阅,所以初学者可以跳过这一节。

对于高级用户,如果你想要注册自己的订阅来通知监控属性的变化,你可以使用subscribe 方法。例如:

  1. myViewModel.personName.subscribe(function(newValue) {   
  2.     alert("The person's new name is " + newValue);   
  3. });  

subscribe 方法在KO内部很多地方都有用到。你也可以终止自己的订阅:首先获取到这个订阅,然后调用dispose方法即可。例如:

  1. var subscription = myViewModel.personName.subscribe(function(newValue) { /* do stuff */ });   
  2. // ...then later...   
  3. subscription.dispose(); // I no longer want notifications  

大多数时间,你不需要这么做,因为内置的绑定和模版系统功能在管理订阅上已经做了很多工作。

这篇关于Knockout开发中文API系列2–创建数据模型和监控属性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j