【Knockout】二、监控属性Observables

MVVM和viewModel

Knockout是建立在以下三大核心功能之上的:

  1. 监控属性和依赖跟踪(Observables and dependency tracking)
  2. 声明式绑定(Declarative bindings)
  3. 模板(Templating)

首先让我们先来了解下MVVM模式,和viewModel的概念。

MVVM(model、view、viewModel)是一种创建用户界面的设计模式,他旨在将一个复杂的UI简单的分割为三个部分:

  • model : 在你的应用用作存储数据;
  • view : 一个可见的、交互的UI来展现viewModel的状态;
  • viewModel : 用纯净的代码来展现ui的数据和操作,可是任意的javascript对象

首先创建一个viewModel,仅仅需要声明一个任意的javascript对象,例如:

var viewModel = {
  name : ‘knockout‘
};

然后为viewModel创建一个声明式的绑定view,例如:

<div id="myview" data-bind="text : name"></div>

最后激活knockout,例如

ko.applyBindings(viewModel,document.getElementById(‘myview‘));

data-bind属性毕竟不是原生的html属性,即使它能够完美的工作,但是浏览器不认识它,你需要激活knockout使它生效。

这样就把一个最简单的viewModel和view绑定到了一起,能够在view里显示viewModel的属性name了,但是,view却不能再viewModel改变的时候自动更新,viewModel也不能再view改变是自动更新!

Observables

knockout的一个重要功能observable(监控属性)就是能够自动自动探测相关的依赖与通知订阅者(automatic dependency detection and notification triggering),即在建立绑定关系的view和

viewModel之间能够在一方改变的时候更新另一方的值。

我们将viewModel稍作修改:

 var viewModel = {
   name : ko.observable("knockout")
 };

现在他就能监控到变化,view就能够自动更新了。

监控属性的读写操作:

1.读取监控属性的值:

viewModel.name();

2.写一个新值到监控属性中:

viewModel.name("new value");

Dependency observables(依赖监控属性)

定义viewModel:

var viewModel = {
  firstName : ko.observable("first"),
   lastName : ko.observable("last")
};

定义依赖监控属性:

viewModel.fullName = ko.dependentObservable(function () {
  return this.firstName() + " " + this.lastName();
}, viewModel);

定义view:

<div id="myview" data-bind="text : fullName"></div>

不管任意的监控属性(firstName、lastName)改变的时候,依赖监控属性fullName都会自动更新。

时间: 2024-11-03 07:26:49

【Knockout】二、监控属性Observables的相关文章

2.Knockout.Js官网学习(监控属性Observables)

前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel = { personName:'aehyok', personAge:25 }; </script> 2.为ViewModel创建一个声明式绑定的简单的View The name is <span data-bind="text:personName"></

(初)Knockout 监控属性(Observables)

1 创建带有监控属性的view model 1.1 Observables Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板(Templating) MVVM and View Models Model-View-View Model (MVVM) 是一种创建用户界面的设计模式. 描述的是如何将复杂的UI用户界面分成3个部分: model: 你程

第二章:监控属性(Observables)

关于Knockout的3个重要概念(Observables,DependentObservables,ObservableArray),本人无法准确表达它的准确含义,所以暂定翻译为(监控属性.依赖监控属性和监控数组),如果有好的建议请指正,多谢. 1 创建带有监控属性的view model Observables Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bind

KnockoutJS(2)-监控属性

本节主要涉及到3个内容: 1. 监控属性 Observables (这个用的比较多,但是其本身使用比较简单,唯一需要注意就是,它监控的对象是一个方法,所以取值和设置值的时候容易混淆) 2. 计算属性  Computed Observable (这个在新增计算列,或者对字段属性值的读写进行验证.转换时特别有用) 3. 监控属性数组 Observable Arrays (这个用的较少,一开始不需要太深入,毕竟直接绑定数组进行简单显示的情况不多) 下面分别简单介绍一下各自的用法. 1. 监控属性Obs

初学knockoutjs记录7——Computed observables依赖监控(4 Pure computed observables 纯计算监控属性)

Pure computed observables 纯计算监控属性 纯计算监控属性在knockout3.2.0中引入,给在大多数场合下常规的计算监控属性提供了一个速度和内存性能更好选择.这是因为纯计算监控属性在它本身没有被订阅的情况下不需要维护它的依赖. 它的特性: Prevents memore leaks 防止内存泄露.纯计算监控属性不再是一个程序引用,但是它的整个依赖依然存在. Reduces computation oberhead 减少计算开销.当值不再被监控时不再进行计算监控属性的计

初学knockoutjs记录8——Computed observables依赖监控(5 Computed Observables Reference 计算监控属性参考)

Computed Observables Reference 计算监控属性参考 下述文档描述了怎样构造和使用计算监控属性. Constructing a computed ovservable 构造计算监控属性 一个计算监控属性可以使用下列任一方式进行构造: 1. ko.computed ( evaluator [, targetObject, options] ) -- 这种方式是创建计算监控属性最常用的方式,支持大多数场景. evaluator -- 一个函数用来评估计算当前计算监控属性的值

初学knockoutjs记录5——Computed observables依赖监控(2 Writable computed observables可写计算监控属性)

Writable computed observables 可写计算监控属性 可写监控属性的要求较高,并且在大多数场合下并不常用. 一般来说,计算监控属性拥有一个有其它监控属性计算得来的值,也正因如此它是通常是只读的,看起来很奇怪,但是,确实有可能让计算监控属性成为可写的,你只需要提供回调函数合理的使用可写的值做一些事情. 你可以像常规的监控属性那样使用计算监控属性,只要你有自定义的逻辑用来截获所有的读写操作.就像普通监控属性一样,你可以使用链接语法编写拥有多个监控属性或计算监控属性的对象模型,

KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables

Pure computed observables Pure computed observables是KO在3.2.0版本中推出的.她相对于之前的ComputedObservables有很多改进: 防止内存泄漏 减少计算开销 在PureComputed函数中,随着相关监控属性值变化的时候,在两种状态之间切换. 每当它没有 值变化的时候,它处于睡眠状态.当进入睡眠状态时,其配置的所有订阅它的依赖.在这种状态下,它不会订阅任何监控属性.如果当它被读取,返回的也是睡眠状态的值. 每当它的 值变化的时

Knockout学习笔记(一)--创建数据模型和监控属性

下面介绍下ko.applyBindings操作时使用的是什么样的参数: 第一个参数是你想激活KO时用于声明式绑定的View Model对象: 第二个参数(可选),你可以使用第二个参数来设置要使用data-bind属性的HTML元素或容器.例如: ko.applyBindings(myViewModel, document.getElementById('someElementId')) 它限制了只有ID为someElementId的元素才能激活使用KO功能,当你在一个页面中声明了多个View M