knockout Observable Array(监控数组)
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(监控数组)的更多相关文章
- Knockout学习之监控数组
监控数组 单个监控属性.组合属性虽然可以解决大部分的问题,但是还有很多是他们无法做到的,比如在一组数据中进行移除添加,所以这节我们将要学习监控数组. 由于监控属性是由ko的observable构造,那 ...
- knockout的监控数组实现
knockout应该是博客园群体中使用最广的MVVM框架,但鲜有介绍其监控数组的实现.最近试图升级avalon的监控数组,决定好好研究它一番,看有没有可借鉴之处. ko.observableArray ...
- knockout 监控数组的缺点
knockout的监控数组没有想象中的强大,只能监控数组元素的位置变化,或个数的增减,然后对视图对应区域进行同步. <!DOCTYPE html> <html> <hea ...
- Knockout.js(二):监控数组属性(Observables Arrays)
如果想发现并响应一个对象的变化,就应该使用监控属性(observables),如果想发现并响应一个集合的变化,就需要使用监控属性数组(observableArray).在很多情况下,它都非常有用,比如 ...
- knockout的依赖属性dependentObservable和observable的监控的使用
1.Knockout是在下面三个核心功能是建立起来的:监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模 ...
- 监控数组与foreach绑定-Knockout.js
html: <h2>Your seat reservations</h2> <table> <thead> <tr> ...
- Knockout v3.4.0 中文版教程-4-通过监控数组工作
2.通过监控数组工作 1. 监控数组 如果你想检测或者响应一个对象的改变,你用observables.如果你想检测和响应一个集合的改变,使用observableArray.这个在很多情况下都非常有用, ...
- 2.Knockout.Js(监控属性Observables)
前言 1.创建一个ViewModel <script type="text/javascript"> //1.创建一个ViewModel var myViewModel ...
- golang之 Array(数组)
目录 一.Array(数组) 二.数组的定义 1. 基本语法 三.数组的初始化 1. 方式一 2. 方式二 3. 方式三 四.数组的遍历 1. 方式一:for循环遍历 2. 方式二:for range ...
随机推荐
- vi编辑器设置行号可见
vi 设置行号 需要切换到命令模式下,输入set number :set number 按下回车即可
- ssm使用velocity模板语言
1.在pom.xml里添加velocity模板语言支持的依赖 <!-- velocity模板语言支持包 --> <dependency> <groupId>org. ...
- [Selenium] Automation Test Manual(Selenium)
http://www.cnblogs.com/puresoul/p/3483055.html http://www.360doc.com/content/14/0913/10/13497042_409 ...
- you are the one(区间dp)
传送门 You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 尚观Linux最佳入门高清视频教程033/133/253
[高清]Linux 最佳入门ULE112- RHCE033部分高清视频教程[尚观原创] 视频简介:高清RHCE033部分是RHCE考试中的基础部分,同时也是我们Linux入门的必 备学习资料.想学好L ...
- 如何给lemon开无限栈
进入终端 输入"ulimit -s unlimited" 输入"lemon" 把lemon源程序拖进来,接着在弹出的lemon界面上操作即可.
- jQuery 引用地址(包括jquery和google提供的地址), 节省你不必要的流量
转载自:http://www.cnblogs.com/henw/archive/2011/09/30/2196255.html 你可以使用这句代码读取jQuery的最新版本的代码文件. jquery官 ...
- XCode10 swift4.2 适配遇到的坑
以下是2018年10月23日更新 经过大约一个月的时间的适配,项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2(以下简称为 4.2 or S4.2),下面是 ...
- git stash和git stash pop(转载)
转自:http://www.cnblogs.com/highriver/archive/2012/01/05/2313808.html zz: http://blog.csdn.net/herbert ...
- 让 Ocelot 与 asp.net core “共存”
让 Ocelot 与 asp.net core "共存" Intro 我们的 API 之前是一个单体应用,各个模块的服务是通过 Assembly 集成在一起,最后部署在一个 web ...