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这种开发语言来说,它开发的插件的使用方法都 ...
随机推荐
- HDU 5653 Bomber Man wants to bomb an Array. dp
Bomber Man wants to bomb an Array. 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5653 Description ...
- hdu 1024 Max Sum Plus Plus DP
Max Sum Plus Plus Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
- debian禁止或者允许指定ip访问远程mysql、ssh、rsynccat /etc/xinetd.conf
如果没有安装xinetd,安装xinetd apt-get install xinetd 然后创建配置文件 vi /etc/xinetd.d/mysqld service login { socket ...
- Integrate SharePoint 2013 with Team Foundation Server 2012
Now that SharePoint 2013 is out I want to make sure that I can integrate SharePoint 2013 with Team F ...
- 【转】C与CPP后缀的文件在编译时的区别
本文出处连接, by Ray FAN(ielnaf@qq.com) ...
- 数学图形(1.40)T_parameter
不记得在哪搞了个数学公式生成的图形. vertices = t = to (*PI) r = 2.0 x = r*(*cos(t) - cos(*t)) y = r*(*sin(t) - sin(*t ...
- RMAN备份与恢复总汇
1.1 备份 1.1.1 对数据库进行全备 使用backup database命令执行备份 RMAN> BACKUP DATABASE; 执行上述命令后将对目标数据库中的所有数据文件进行备份, ...
- 通用 CSS 笔记、建议与指导
在参与规模庞大.历时漫长且人手众多的项目时,所有开发者遵守如下规则极为重要: + **保持 CSS 的可维护性** + **保持代码清晰易懂** + **保持代码的可拓展性** 为了实现这一目标,我们 ...
- 《Pro JavaScript Techniques》中的一些函数
//获取元素的样式值. function getStyle(elem, name) { if (elem.style[name]) { return elem.style[name]; } else ...
- C#特性杂谈
文中充满了各种C#与其他语言的对比及吐槽, 希望介意者勿观… 当然, 鉴于太乱, 我怀疑有没有人能看完. 学习C# Hello World 变量与表达式 动态类型 值类型和引用类型 checked支持 ...