Observable Array(监控数组)的作用

列表操作是经常会遇到的一个场景,使用监控数组,你可以:

  • 保存列表对象,并且使用Ko提供的丰富的API操作列表元素(支持内建js Array的方法,以及ko自己添加的方法:remove,removeAll等)
  • 监控数组元素个数的变化,并且自动通知外部。如果与UI绑定,则自动更新UI

Observable Array与js内建Array区别

  • Observable Array是ko对象,内部包装了Array对象,而后者仅仅是一个Array对象 。
  • 前者可以跟踪数组个数变化,后者不能
  • 前者可以使用js内建数组对象的方法+ko扩展的API来操作数据,后者只能使用js内建数组对象提供的方法操作数据

Observable Array注意事项

这里需要单独提示一点对Observable Array理解可能出现偏差的地方:

  • Observable Array不监控元素本身的变化:Observable Array只处理元素个数的变化,比如数组元素删除和添加。元素自身的变化是否能自动监控,取决于元素本身是普通对象还是Observable对象。
  • 如何既监控数组元素个数,又监控元素内容变化:往数组中push元素的时候,使用observable元素即可,则该元素可以自动监控自身的变化。

实例讲解:Observable Array

基本语法

1、定义

var myObservableArray = ko.observableArray();    //建立一个监控数组
myObservableArray.push('Some value'); //使用push方法添加数组元素 var anotherObservableArray = ko.observableArray([
{ name: "Bungle", type: "Bear" },
{ name: "George", type: "Hippo" },
{ name: "Zippy", type: "Unknown" }
]);//可以在建立监控数组的同时初始化数组

2、读取

alert('The length of the array is ' + myObservableArray().length);//使用()号读取数组元素,然后就可以随意操作JS  Array对象的属性
alert('The first element is ' + myObservableArray()[0]);//读取第一个元素

3、写入

var a =ko.observableArray(['1','2'])//初始化的时候写入值
a(['3','4']);//使用(value)方式重新写入数据,现在a()=['3','4']

4、订阅数组元素个数变化事件

var myObservableArray = ko.observableArray();  

myObservableArray.subscribe(function (newVal) {
alert(newVal.length);
alert(newVal[0]);
});//订阅数组元素变化事件,newVal将会传入变化后的数组对象 myObservableArray.push('1');//push一个新元素进去,会alert一个长度,和'1'

5、ko扩展的数组API

var myObservableArray = ko.observableArray(["item1", "item2", "item3", "item4", "item5", "item6", "7", "8"]);  //构建监控数组

myObservableArray.remove("item1");//移除item1
myObservableArray.remove(function (item) {
return item.length < 4;//只有长度小于4的元素被移除
});//移除 "7", "8"
myObservableArray.removeAll(["item2", "item3"]);//移除item2,item3
myObservableArray.removeAll();//移除所有的

knockout Observable Array(监控数组)的更多相关文章

  1. Knockout学习之监控数组

    监控数组 单个监控属性.组合属性虽然可以解决大部分的问题,但是还有很多是他们无法做到的,比如在一组数据中进行移除添加,所以这节我们将要学习监控数组. 由于监控属性是由ko的observable构造,那 ...

  2. knockout的监控数组实现

    knockout应该是博客园群体中使用最广的MVVM框架,但鲜有介绍其监控数组的实现.最近试图升级avalon的监控数组,决定好好研究它一番,看有没有可借鉴之处. ko.observableArray ...

  3. knockout 监控数组的缺点

    knockout的监控数组没有想象中的强大,只能监控数组元素的位置变化,或个数的增减,然后对视图对应区域进行同步. <!DOCTYPE html> <html> <hea ...

  4. Knockout.js(二):监控数组属性(Observables Arrays)

    如果想发现并响应一个对象的变化,就应该使用监控属性(observables),如果想发现并响应一个集合的变化,就需要使用监控属性数组(observableArray).在很多情况下,它都非常有用,比如 ...

  5. knockout的依赖属性dependentObservable和observable的监控的使用

    1.Knockout是在下面三个核心功能是建立起来的:监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模 ...

  6. 监控数组与foreach绑定-Knockout.js

    html: <h2>Your seat reservations</h2> <table>    <thead>  <tr>         ...

  7. Knockout v3.4.0 中文版教程-4-通过监控数组工作

    2.通过监控数组工作 1. 监控数组 如果你想检测或者响应一个对象的改变,你用observables.如果你想检测和响应一个集合的改变,使用observableArray.这个在很多情况下都非常有用, ...

  8. 2.Knockout.Js(监控属性Observables)

    前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel ...

  9. golang之 Array(数组)

    目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...

随机推荐

  1. java的数字精确计算问题-BigDecimal

    java的数字运算,偶尔会出现精度的问题,以下阐述的 java的BigDecimal类的使用. 例如: System.out.println(0.9+0.3); 结果1.2 System.out.pr ...

  2. 一步一步学Silverlight 2系列(24):与浏览器交互相关辅助方法

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 【Java】DateUtil(2)

    import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  4. 【字符串】BZOJ上面几个AC自动机求最为字串出现次数的题目

    (一下只供自己复习用,目的是对比这几个题,所以写得不详细.需要细节的可以参考其他博主) [BZOJ3172:单词] 题目: 某人读论文,一篇论文是由许多(N)单词组成.但他发现一个单词会在论文中出现很 ...

  5. CodeForces-884D:Boxes And Balls(合并石子)

    Ivan has n different boxes. The first of them contains some balls of n different colors. Ivan wants ...

  6. BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流

    BZOJ_4276_[ONTAK2015]Bajtman i Okrągły Robin_线段树优化建图+最大费用最大流 Description 有n个强盗,其中第i个强盗会在[a[i],a[i]+1 ...

  7. 如何给lemon开无限栈

    进入终端 输入"ulimit -s unlimited" 输入"lemon" 把lemon源程序拖进来,接着在弹出的lemon界面上操作即可.

  8. laravel5.2 增加Caffienate Modules,实现模块化开发

    1.模块化开发可以把框架分成 Topc前台模块,Topm手机端前台,Admin后台管理模块,每个模块中都有自己的一套Controller,Logic,router等. 2.咖啡因模块是一个简单的包,以 ...

  9. Bootstrap-CL:输入框组

    ylbtech-Bootstrap-CL:输入框组 1.返回顶部 1. Bootstrap 输入框组 本章将讲解 Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组 ...

  10. memset函数学习

    memset是计算机中C/C++语言函数.将s所指向的某一块内存中的后n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存 ...