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这种开发语言来说,它开发的插件的使用方法都 ...
随机推荐
- Spring Mvc 前台数据的获取、SpringMvc 表单数据的获取
首先在web.xml 里面配置一个编码过滤器 <!-- springmvc框架本身没有处理请求编码,我们自己配置一个请求编码过滤器 --> <filter> <filte ...
- 常用数据库validationQuery检查语句
数据库 validationQuery Oracle select 1 from dual DB2 select 1 from sysibm.sysdummy1 mysql select 1 mi ...
- Java乐观锁实现之CAS操作
介绍CAS操作前,我们先简单看一下乐观锁 与 悲观锁这两个常见的锁概念. 悲观锁: 从Java多线程角度,存在着“可见性.原子性.有序性”三个问题,悲观锁就是假设在实际情况中存在着多线程对同一共享的竞 ...
- hdu 1569 最小割
和HDU 1565是一道题,只是数据加强了,貌似轮廓线DP来不了了. #include <cstdio> #include <cstring> #include <que ...
- BZOJ 1040 ZJOI 2008 骑士 树形DP
题意: 有一些战士,他们有战斗力和讨厌的人,选择一些战士,使他们互不讨厌,且战斗力最大,范围1e6 分析: 把战士看作点,讨厌的关系看作一条边,连出来的是一个基环树森林. 对于一棵基环树,我们找出环, ...
- PHP 基础函数(二)数组的内部指针
current($arr); 返回数组中的当前单元pos($arr); 返回数组中的当前单元key($arr); 返回数组中当前单元的键名prev($arr); 将数组中的内部指针倒回一位ne ...
- mysql sql优化及注意事项
sql优化分析 通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引.不必要的数据访问和排序)当我们面对具体的sql时,首先查看其执行计划A.看其是否使用索 ...
- FLV视频在IIS6.0下不能播放 处理的方法
FLV视频在IIS6.0下不能播放 Flash视频由于其较高的压缩率和优越的下载速度,前景普遍看好,同时也为Flash课件增色不少.然而,在FLV视频播放中,却有两个头痛的问题 一.FLV视频在 ...
- OpenERP实施记录(13):出库处理
本文是<OpenERP实施记录>系列文章的一部分. 在前面的文章中,业务部门接到沃尔玛3台联想Y400N笔记本电脑的订单,ABC公司立即采购了8台(3台送货+5台备库存)回来,完成了入库和 ...
- 【IntellJ IDEA】idea上所有代码都报错了
可能会碰到蓝屏,内存溢出重启idea等特殊情况. 重新打开idea后发现原本的代码全都报错了 正确的解决方法: 方法很简单 执行idea工具栏上下面的菜单: File -> Invalidate ...