knockoutjs -- applyBinding & Observables
applyBindings
ko.applyBindings(myViewModel); // Knockout调用applyBindings激活myViewModel(即把myViewModel和View中的声明式绑定data-bind关联起来)
ko.applyBindings(myViewModel, document.getElementById('someElementId')); // 限制只在指定对象someElementId和后代节点中进行激活操作。
personName: ko.observable('Bob'),
The name is <span data-bind="text: personName"></span> // 静态绑定
Observables
并不是所有的浏览器都支持JavaScript的getters和setters方法(IE),因此从兼容性考虑,ko.observable是function。
读取observable属性:myViewModel.personName()
设置observable属性:myViewModel.personName('Mary')
同时设置多个observable属性:myViewModel.personName('Mary').personAge(50) 链式语法
- // 动态绑定(主动订阅,取消订阅)
- var subscription = myViewModel.personName.subscribe(function(newValue) { /* do stuff */ });
- // ...then later...
- subscription.dispose(); // I no longer want notifications
- // Computed Observables
- this.fullName = ko.computed(function() {
- return this.firstName() + " " + this.lastName();
- }, this);
- var myObservableArray = ko.observableArray(); // Initially an empty array
- myObservableArray.push('Some value'); // Adds the value and notifies observers
- // 初始化绑定数组
- // This observable array initially contains three objects
- var anotherObservableArray = ko.observableArray([
- { name: "Bungle", type: "Bear" },
- { name: "George", type: "Hippo" },
- { name: "Zippy", type: "Unknown" }
- ]);
- // 自定义排序
- myObservableArray.sort(function(left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })
- // 可写的依赖属性 --- 数字自动格式化显示,保存值时移除无关逗号
- function MyViewModel() {
- this.price = ko.observable(25.99);
- this.formattedPrice = ko.computed({
- read: function () {
- return '$' + this.price().toFixed(2);
- },
- write: function (value) {
- // Strip out unwanted characters, parse as float, then write the raw data back to the underlying "price" observable
- value = parseFloat(value.replace(/[^\.\d]/g, ""));
- this.price(isNaN(value) ? 0 : value); // Write to underlying storage
- },
- owner: this
- });
- }
- ko.applyBindings(new MyViewModel());
Writeable computed observables可写的依赖属性(FirstName 和 FullName相互换算,数字自动格式化显示)
ko.dependentObservable(Knockout 2.0中新增加的方法,和ko.computed等价,但是更加方便理解使用)
Observable Arrays
observableArray :跟踪的是数组中的对象,而不是对象的状态。即observableArray 仅跟踪它拥有的对象,并且在对象被添加或者删除的时候,通知listeners 。要监控对象的属性变化,需要编写独立的代码。
由于observableArray()方法放回的是一个数组,因此从技术上来说,任何Javascript关于数组操作的原生方法都能直接使用。但是基于下述理由,通常推荐使用KO中的等价方法:
1,KO中的方法支持所有主流浏览器(比如,Javascript原生方法indexOf在<=IE8时不正常,而KO的indexOf 能正常工作)
2,dependency tracking
3,语法更加简洁:调用KO中的方法使用myObservableArray.push(...),调用原生Javascript中的方法使用myObservableArray().push(...)
具体每个方法参考下面链接中的文档
observableArray 排序:默认对字符串用字母排序,对数字用数值排序。可以自定义排序方法:参考代码块中的代码
参考:Observables
knockoutjs -- applyBinding & Observables的更多相关文章
- KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables
Pure computed observables Pure computed observables是KO在3.2.0版本中推出的.她相对于之前的ComputedObservables有很多改进: ...
- Knockoutjs官网翻译系列(三) 使用Computed Observables
书接上回,前面谈到了在视图模型中可以定义普通的observable属性以及observableArray属性实现与UI元素的双向绑定,这一节我们继续探讨第三种可实现绑定的属性类型:computed o ...
- Knockoutjs快速入门(经典)
Knockoutjs是一个JavaScript实现的MVVM框架.主要有如下几个功能: 1. Declarative bindings 2. Observables and dependency tr ...
- [转]Knockoutjs快速入门
本文转自:http://www.cnblogs.com/yinzixin/archive/2012/12/21/2827356.html Knockoutjs是一个JavaScript实现的MVVM框 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 4 - 验证
验证: 快要完成我们程序的界面部分了.剩下的事情就是在用户点击 "保存" 的时候管理验证问题了.验证是主要需求,今天就是最无知的应用也不会忽视它.通过正确的验证,用户可以知道应该输 ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
- KnockoutJS 3.X API 第八章 映射(mapping)插件
Knockout旨在允许您将任意JavaScript对象用作视图模型. 只要一些视图模型的属性是observables,您可以使用KO将它们绑定到您的UI,并且UI将在可观察属性更改时自动更新. 大多 ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...
随机推荐
- java 环境变量设定
1 新建系统环境 新建 弹出“新建系统变量”对话框,分别输入变量名“JAVA_HOME”和变量值(java安装路径)“C:\Java\jdk1.7.0_03”,其中变量值是笔者的J ...
- bzoj 1625: [Usaco2007 Dec]宝石手镯
Description 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为 ...
- Acdream 1738 世风日下的哗啦啦族I 树套树
世风日下的哗啦啦族I Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1738 Descri ...
- js实现大转盘抽奖游戏实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android Zxing调整扫描区域 优化取图速度
Zxing 是google提供的二维码扫描project Demo本身默认的扫图区域最大仅仅有 360*480 须要拉开非常远的距离才干将整个二维码扫描到 因此须要我们自己调整取图大小 在Cam ...
- ADC for programmable logic uses one capacitor
Many electronic devices require user input for setting the application properties. Typical input dev ...
- introduction to my business card
http://www.t4f.org/projects/business-card/ After 4 years working in an international IT consulting c ...
- Android开发利用Volley框架下载和缓存网络图片
2013年Google I/O大会上推出了一种新的网络通信框架——Volley,Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可 ...
- 初学数位DP--hdu 2089
其实是做topcoder的时候碰到不会的题,看人家说要用数位dp,所以拿http://acm.hdu.edu.cn/showproblem.php?pid=2089来学习了一下 数位dp适合在一段数的 ...
- 作用JavaScript访问和操作数据库
JS操作 Access 数据库 <SCRIPT LANGUAGE="JavaScript"> <!-- var filePath = location.href. ...