1.  四大关键理念:

  A. DeclarativeBindings(声明式绑定)

  Easily associate DOM elements with model data using a concise, readable syntax

  使用简单易读的语法方便地将模型数据与DOM元素绑定在一起

  B. AutomaticUIRefresh(页面自动刷新)

  When your data model's state changes, your UI updates automatically

  C. DependencyTracking(依赖追踪)

  Implicitly set up chains of relationships between model data, to transform and combine it

  使用可观察对象在模型数据之间设立隐性关系链,用于数据转换和绑定。

  D. Templating(模板)

  Quickly generate sophisticated, nested UIs as a function of your model data

  内置模板引擎、为你的模型数据快速编写复杂的 UI 展现

2. 声明式绑定

  声明式绑定即它的声明的同时也进行了绑定(自己的理解)。

3. applyBindings

  Activates knockout.js -ko.applyBindings(new AppViewModel());

  激活knockout.js(即激活data-bind属性)

4. observables - these are properties that automatically will issue notifications whenever their(View Models)  value changes

  双向绑定,当ViewModel中的值发生变化时,Dom元素的值也会相应地发生变化,反之亦然。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<script type="text/javascript" src="knockout-3.4.0.js"></script>
<script type="text/javascript">
window.onload = function ()
{
ko.applyBindings(new AppViewModel());
} function AppViewModel()
{
this.firstName = ko.observable("Hello ");
this.lastName = ko.observable("World!");
this.fullName = ko.computed(function () {
return this.firstName() + " " + this.lastName();
},this);
this.capitalizeLastName = function ()
{
var currentVal = this.lastName();
this.lastName(currentVal.toUpperCase());
}
} </script>
</head>
<body>
<P>First Name:<input data-bind="value: firstName" /></P>
<P>Last Name:<input data-bind="value: lastName" /></P>
<p>FullName:<input data-bind="value: fullName" /></p>
<button data-bind="click: capitalizeLastName">Go Caps</button>
</body>
</html>

5. knockout例子(座位预订)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<script type="text/javascript" src="knockout-3.4.0.js"></script>
<script type="text/javascript">
function SeatReservation(name,initialMeal)
{
var self = this;
self.name = name;
self.meal = ko.observable(initialMeal);
self.formattedPrice = ko.computed(function () {
var price = self.meal().price;
return price ? "$" + price.toFixed(2) : "None";
});
} function ReservationsViewModel()
{
var self = this;
self.availableMeals = [
{ mealName: "Standard(Sandwich)", price: 0 },
{ mealName: "Premium:(lobster)", price: 34.95 },
{ mealName:"Ultimate(whole zebra)",price:290}
];
self.seats = ko.observableArray([
new SeatReservation("Steve", self.availableMeals[0]),
new SeatReservation("Bert", self.availableMeals[0])
]); self.addSeat = function () {
self.seats.push(new SeatReservation("", self.availableMeals[0]));
}; self.removeSeat = (function (seat) {
self.seats.remove(seat);
}); self.totalSurcharge = ko.computed(function () {
var total = 0;
for (var i = 0; i < self.seats().length; i++)
{
total += self.seats()[i].meal().price;
}
return total;
})
}
window.onload = function () {
ko.applyBindings(new ReservationsViewModel());
} </script>
</head>
<body>
<h2>Your seat reservations</h2>
<table>
<thead>
<tr>
<th>Passenger name</th>
<th>Meal</th>
<th>Surcharge</th>
</tr>
</thead>
<tbody data-bind="foreach:seats">
<tr>
<td><input data-bind="value:name"/></td>
<td><select data-bind="options:$root.availableMeals,value:meal,optionsText:'mealName'"></select></td>
<td data-bind="text:formattedPrice"></td>
<td><a href="#" data-bind="click:$root.removeSeat">Remove</a></td>
</tr>
</tbody>
</table>
<h3 data-bind="visible:totalSurcharge()>0">
Total surcharge:$<span data-bind="text:totalSurcharge().toFixed(2)"></span>
</h3>
<button data-bind="click:addSeat,enable:seats().length<10">Reserve another seat</button> </body>
</html>

6.Knockout使用<!--ko--><!--/ko-->来表示循环的开始和结束;

   切记不是注释!

7. 总结分析:

问题一:在第一个例子中,在调用ko.computed()方法时,第二个参数this的作用?

答:这个和JS中的基本一致,是为了ko.computed()方法内部的使用而传入的;

问题二:在第二个例子中,什么时候用meal,什么时候用meal()?(以下为官网说法)

  Notice that, because the meal property is an observable, it's important to invoke meal() as a function (to obtain
  its current value) before attempting to read sub-properties. In other words, write meal().price, not meal.price.

因为meal的属性是observable,在获取该类型当前值时,必须将其作为一个函数来使用,即 meal() ,换句话说就是meal().price,而不是meal.price。

Knockout学习笔记之一的更多相关文章

  1. knockout学习笔记目录

    关于knockout学习系列的文章已经写完,这里主要是做个总结,并且将目录罗列出来,方便查看.欢迎各位大神拍砖和讨论. 总结 kncokout是一个轻量级的UI类库,通过MVVM模式使前端的UI简单话 ...

  2. knockout学习笔记10:demo

    前面已经介绍了ko的基本用法,结合官方文档,基本就可以实际应用了.本章作为ko学习的最后一篇,实现一个简单的demo.主要集中在ko,所以后台数据都是静态的.类似于博园,有一个个人文章的分类列表,一个 ...

  3. Knockout学习笔记之二($root,$parent及$data的区别)

    以下是我从Google上找到的一个例子,非常生动形象,我修改了部分代码,具体内容如下: 对于$root 与$parent的区别: $root refers to the view model appl ...

  4. KnockoutJs学习笔记(五)

    作为一名初学者来说,一篇篇的按顺序看官网上的文档的确是一件很痛苦的事情,毕竟它的排列也并非是由浅及深的排列,其中的顺序也颇耐人寻味,于是这篇文章我又跳过了Reference部分,进而进入到具体的bin ...

  5. Knockout.js快速学习笔记

    原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  8. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. Wordpress去除管理员工具条

    想去掉这条东西有多种方式,个人比较喜欢这个,灵活~ 打开用户,在用户选项里,把这个勾走.

  2. JS的基础知识

    前言:写前端代码时的各种取值纠结,让我决定我必须要好好学一下js............加油~ $("#tr"+id).remove() 删除某一行,而不用刷新页面 HightCh ...

  3. 获取windows磁盘的可用空间函数

    <?php /* *获取某个磁盘的剩余空间 *$param 关联数组,下标是哪个盘,单位,可以是B,KB,MB,GB *可以设置获取多个磁盘,例如:array('C'=>'KB','D'= ...

  4. Inside Flask - signal 信号机制

    Inside Flask - signal 信号机制 singal 在平常的 flask web 开发过程中较少接触到,但对于使用 flask 进行框架级别的开发时,则必须了解相关的工作机制.flas ...

  5. tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。

    简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...

  6. JS小数点加减乘除运算后位数增加的解决方案

    /** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var ...

  7. PinPhoto On OS X

    把多张图片摆放到屏幕任何位置并保存成文件,下次打开时恢复之前的状态! 一般使用场景: 经常要看的图片,比如说软件快捷键.库的API.英文生词.常用配色等等摆好在屏幕上以便查看和记忆. 用PS等画画.设 ...

  8. 使用回车键代替TAB键 需jquery1.4.2版本

    1 $(document).ready(function () { 2 $(':input:text:first').focus(); 3 $(':input:enabled').addClass(' ...

  9. Ubuntu 12.04安装vim和配置

    问题: ubuntu默认没有安装vim,出现: jyg@ubuntu:~$ vim test.cThe program 'vim' can be found in the following pack ...

  10. windows系统调用 获取当前内存信息

    #include "iostream" #include "windows.h" #include "shlwapi.h" #include ...