29
Knockout.js 个个个个个 UI 个个 个个个个 MVVM 个个个 JavaScript 个个 UI 个个 个个个 KO 个个个个个个 JSON 个个个个个 UI 个个个个个 个个个 个个个个http://knockoutjs.com

Knockout js

Embed Size (px)

DESCRIPTION

knockout js by元泉

Citation preview

Page 1: Knockout js

Knockout.js一个轻量级的 UI类库,通过应用MVVM模式使

JavaScript前端 UI简单化

可以把 KO当成通过编辑 JSON数据来制作 UI用户界面的一种方式

官方网站: http://knockoutjs.com

Page 2: Knockout js

MVVMModel-View-View Model 是一种创建 UI的设计模式。

• model : 你程序里存储的数据。• view model :在 UI上,纯 code描述的数据以及操作。• view :一个可见的,交互式的,表示 view model状态的 UI。

Page 3: Knockout js

Knockout的 4大概念:1. 声明式绑定  (Declarative Bindings)2. UI界面自动刷新  (Automatic UI Refresh)3. 依赖跟踪  (Dependency Tracking)4. 模板  (Templating)

Knockout简称: KO

Page 4: Knockout js

1.创建一个 view model,只需要声明任意的 JavaScript object。例如:

var myViewModel = { firstName: 'Bob', lastName: 'Smith'};

2.为 view model创建一个声明式绑定的简单 view。例如:

The name is <span data-bind="text: personName"></span>

3.激活 Knockout

ko.applyBindings(myViewModel);

Page 5: Knockout js

Observables( 监控属性 )var myViewModel = { firstName : ko.observable('Bob'), lastName : ko.observable( 'Smith')};

不需要修改 view , 所有的 data-bind语法依然工作,不同的是他能监控到变化,当值改变时, view会自动更新。

监控属性( observables )的读和写

读: firstName() 写: lastName(‘YuanQuan’)

Page 6: Knockout js

Dependent Observables(依赖监控属性)

viewModel.fullName = ko.dependentObservable(function () { return this.firstName() + " " + this.lastName();}, viewModel);

添加一个依赖监控属性来返回姓名全称:

并且绑定到 UI的元素上,例如:

The name is <span data-bind="text: fullName"></span>

Page 7: Knockout js

observable数组如果探测和响应一个集合的变化,应该用 observableArray

pop, push, shift, unshift, reverse, sort, splice

myObservableArray.remove(someItem)

myObservableArray.remove(function(item) { return item.age < 18 })

myObservableArray.removeAll(['Chad', 132, undefined])

Page 8: Knockout js

Hello World

Page 9: Knockout js

内置绑定1 visible 绑定

Page 10: Knockout js

内置绑定1 visible 绑定使用函数或者表达式来控制元素的可见性

Page 11: Knockout js

内置绑定2 text 绑定

KO将参数值会设置在元素的 innerText ( IE)或textContent( Firefox和其它相似浏览器)属性上

Page 12: Knockout js

内置绑定3 html 绑定

KO设置该参数值到元素的 innerHTML属性上,元素之前的内容将被覆盖。

Page 13: Knockout js

内置绑定4 css 绑定

非布尔值会被解析成布尔值。例如,  0和 null被解析成false, 21和非 null对象被解析成 true。

Page 14: Knockout js

内置绑定4 css 绑定如果你想使用 my-class class,你不能写成这样:

因为my-class不是一个合法的命名。解决方案是:在my-class两边加引号作为一个字符串使用。

Page 15: Knockout js

内置绑定5 style 绑定style绑定是添加或删除一个或多个 DOM元素上的 style值。比如:当数字变成负数时高亮显示,或者根据数字显示对应宽度的 Bar。

错误:  { font-weight: someValue }; 正确:  { fontWeight: someValue }

Page 16: Knockout js

内置绑定6 attr 绑定attr 绑定提供了一种方式可以设置 DOM元素的任何属性值。你可以设置 img的 src属性,链接的 href属性。使用绑定,当模型属性改变的时候,它会自动更新。

错误:  { data-url: someValue }; 正确:  { “data-url”: someValue }

Page 17: Knockout js

内置绑定7 click 绑定

每次点击按钮的时候,都会调用 incrementClickCounter()函数,然后更新自动更新点击次数。

Page 18: Knockout js

内置绑定7 click 绑定

有些情况,你可能需要使用事件源对象, Knockout会将这个对象传递到你函数的第一个参数:

你可以声明任何 JavaScript函数 – 不一定非要是 view model里的函数。你可以声明任意对象上的任何函数,例如: obj.someFunction。

Page 19: Knockout js

内置绑定7 click 绑定

如果你想让默认的事件继续执行,你可以在你 click的自定义函数里返回 true。

默认情况下, KO会阻止默认的事件继续执行。

防止事件冒泡:

Page 20: Knockout js

内置绑定8 event 绑定

Page 21: Knockout js

内置绑定9 更多绑定(不一一列举)

http://knockoutjs.com/documentation/event-binding.html

Page 22: Knockout js

内置绑定9 foreach 绑定

Page 23: Knockout js

内置绑定9 foreach 绑定

Page 24: Knockout js

内置绑定9 foreach 绑定

afterRender, afterAdd, beforeRemove 回调(可以做动画效果)

Page 25: Knockout js

内置绑定10 更多控制流绑定

http://knockoutjs.com/documentation/if-binding.html

Page 26: Knockout js

自定义绑定

Page 27: Knockout js

模板绑定

Page 28: Knockout js

模板绑定

Page 29: Knockout js

QA/吐槽