knockout简单实用教程1

第一次接触knockout是在一年多之前吧。当时是接手了一个别人的项目,在项目中有用到knockout来进行数据的绑定。也就开始学习起来knockout。在之后的项目中也多次用到了这个。在第一次开始学习的时候也遇到了一些困难。所以呢想写一篇比较入门的教程让大家来了解和使用knockout,其实所有的使用方法都可以去官网的文档里去查看里面写的很详细。我这里呢是为了那些还不习惯看英文文档并且刚入门的人看得(PS:坏习惯得改啊因为大部分文档都是英文的)

废话不多说了。先简单说明一下是knockout ,knockout.js是一个轻型的MVVM前台框架,说简单一点就是用来绑定数据的。它的优点是如果数据源发送改变那么它会自动刷新数据,而不需要你手动的再次绑定,第二个好处前后台代码的分离也就是MVVM的思想吧。以为ASP.NETMVC为例吧。在ASP.NETMVC中如果你需要绑定数据你要怎么做,以往的做法是把数据给到viewdata里面,然后在前台用razor语法进行绑定也就是通过后台代码进行绑定。但是它带来的问题是你需要加各种判断来去除为空的情况,否则就会出现讨厌的黄页了。而且你没办法异步的刷新页面.而通过knockout你就完全不需要考虑这个问题了,这也就是MVVM带来的好处。我只需要处理json数据就行了。关于介绍就说这么多了。其他的好处你们在使用中慢慢体会吧.

在是用knockout之前,你需要了解几个概念

首先是Viewmodel 这个模型和MVC的model不是一个东西。这个viewmodel一个JS对象

像这样的

var myViewModel = {
    personName: ‘Bob‘,
    personAge: 123
};

在一个页面中你可以声明多个VM模型。但是我不建议这么做。原因后面我会讲到。

knockout绑定的基本语法是

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

在标签中直接打上属性data-bind来实现绑定。支持文本绑定,html绑定,属性绑定,css绑定等等。我就不一一列举了想要了解详情的同学可以去knockout官网查看地址是 http://knockoutjs.com/documentation/introduction.html

knockout的语法是非常的灵活的。很多语法当你不知道怎么写的时候你可以试试就按你平时写后台代码的语法试试说不定就可以了。当然查官方文档还是最快的方式了。

上面的绑定还差最后一步那就是

ko.applyBindings(myViewModel);

把模型绑定到document里,当然你也可以把数据绑定到具体的document对象上比如,div,table之类语法和上面的类型

ko.applyBindings(myViewModel,document.getElementById("具体的dom对象的id"));

上面的这边绑定方式呢比较死。因为数据是写死的那如何动态的绑定呢?也就是数据源改变了页面自动更新 ,这里就要介绍observables语法了 observables简单来说就是自动绑定。如果元数据改变了的话它会自动更新它自己。下面给个列子

// 当前模型
var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);

    this.fullName = ko.pureComputed(function() {
        // 当firstname改变是会更新模型
        return this.firstName() + " " + this.lastName();
    }, this);
};

ko.applyBindings(new ViewModel("Planet", "Earth")); //给定初始值并进行绑定

这个是JS创建模型和模型绑定的代码相信大家能看的明白。简单说明一下大概的意思就是创建一个模型。模型有两三个字段其中两个通过自动绑定标识的也就意味着当他被改变的时候模型会自动更新。也就意味着。第三个字段会自动进行更新。下面给出绑定代码。

<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>

在这个地址 http://jsfiddle.net/rniemeyer/bxfXd/ 可以调试这个代码.  相信看完这段代码大家能明白什么是自动更新数据了吧.

一般呢在页面上我们还需要给dom对象绑定上事件。那么在knockout里面是怎么绑定事件的呢?下面给出说明,照例先贴出来一段代码

var ClickCounterViewModel = function() {
    this.numberOfClicks = ko.observable(0);

    this.registerClick = function() {
        this.numberOfClicks(this.numberOfClicks() + 1);
    };

    this.resetClicks = function() {
        this.numberOfClicks(0);
    };

    this.hasClickedTooManyTimes = ko.pureComputed(function() {
        return this.numberOfClicks() >= 3;
    }, this);
};

ko.applyBindings(new ClickCounterViewModel());

上面的代码。相信大家也都能看的明白。很简单的逻辑就用来统计点击次数。如果用面向对象的思想来看的话。就是说一个“对象”有各种各样的属性,比如姓名啊性别啊之类 称之为对象的属性。也有各种的行为,比如吃饭啊走路啊。这称之为对象的行为。这里的属性对象对象的就是ko(knockout后文中都以此来替代)的字段了,对象的行为也就是ko里面的js事件了。绑定ko的话可以称为对象的初始化. 以上这些解释呢是为了让读者能更方面的理解ko的模型的含义。说了这么多那怎么绑定事件呢?下面给出dom绑定的代码

<div>You‘ve clicked <span data-bind=‘text: numberOfClicks‘>&nbsp;</span> times</div>

<button data-bind=‘click: registerClick, disable: hasClickedTooManyTimes‘>Click me</button>

<div data-bind=‘visible: hasClickedTooManyTimes‘>
    That‘s too many clicks! Please stop before you wear out your fingers.
    <button data-bind=‘click: resetClicks‘>Reset clicks</button>
</div>

同上也给出调试的地址 http://jsfiddle.net/rniemeyer/3Lqsx/

相信看完上面的内容。大家对ko已经有了一定的了解了 下面在说明如何绑定json对象。这也是我们用的最多的方式了。这里在结合前面的绑定方式做一个总的例子,

下面的例子中有绑定事件,绑定简单数据和数组集合.废话不多说直接上代码.

第一步当然还是创建模型对象了

var SimpleListModel = function(items) {
    this.items = ko.observableArray(items);
    this.itemToAdd = ko.observable("");
    this.addItem = function() {
        if (this.itemToAdd() != "") {
            this.items.push(this.itemToAdd()); // 把你输入的文本插入到数组里.
            this.itemToAdd(""); // 清空itemtoadd字段的文本内容
        }
    }.bind(this);
};

ko.applyBindings(new SimpleListModel(["Alpha", "Beta", "Gamma"]));//这里可以进行初始化你可以把你拿到的json数据直接丢进去就行了

在创建这个模型对象的时候我对第一个属性的类型的声明为 ko.observableArray() ,上面的例子用的是ko.observable 他们两个的区别的是 绑定单个字符还是绑定数组集合,只有这点区别。其他的都是一样的,你要是把VM当做一个对象来处理就更好理解了。就是相当于对象里字段的类型一个是int 一个是list<int>。

下面直接给出绑定dom的代码

<form data-bind="submit: addItem">
    New item:
    <input data-bind=‘value: itemToAdd, valueUpdate: "afterkeydown"‘ />
    <button type="submit" data-bind="enable: itemToAdd().length > 0">Add</button>
    <p>Your items:</p>
    <select multiple="multiple" width="50" data-bind="options: items"> </select>
</form>

调试地址http://jsfiddle.net/rniemeyer/bxfXd/

相信看过之前的内容后看这个绑定的话应该也可以容易理解了。从这里也可以看出来ko的语法是非常灵活的。可以非常随意的去写。这也是脚本语言的优势。

看到这里大家应该对ko的整体和简单的使用有了一定的了解,也肯定会有很多的疑问(可以直接文章下面留言提出来)。但是到这并没有结束。在以后的时间里我会继续完成这一系列的关于ko的教程。这其中很多内容我是参考了官方的文档来编写的。也有我的一些理解在里面如有不足之处请见谅。

时间: 2025-01-15 00:56:59

knockout简单实用教程1的相关文章

knockout简单实用教程3

在之前的文章里面介绍了一些KO的基本用法.包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识.包括比较特殊绑定方式和语法还有KO官方mapping插件的使用等等.对了在前面的文章中好像漏掉了属性绑定的的介绍.那就先简单介绍下.属性绑定吧.直接上代码. <a data-bind="attr: { href: url, title: details }"> Report </a&g

knockout简单实用教程2

在上一篇文章中简单了介绍了下什么ko(后文中都已ko来代替knockout.js)和一些简单的ko的使用方法下面我将介绍在实际的项目中常用到的几种绑定方式和方法. 在开始之前先拿一个dome来回顾下ko的绑定方式吧.废话不多说上代码. var BetterListModel = function () { this.itemToAdd = ko.observable(""); this.allItems = ko.observableArray(["Fries",

Android基础入门教程——2.4.2 ListView简单实用

Android基础入门教程--2.4.2 ListView简单实用 标签(空格分隔): Android基础入门教程 本节引言: 一口气把Android入门网络编程的章节写完了,本节我们来继续学习没有讲完的UI控件部分, 回顾上一节,我们介绍了Adapter适配器的概念,然后学习了三个最简单的适配器的使用: ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而本节给大家讲解的是第一个 需搭配Adapter使用的UI控件:ListView,不过在版本中被R

PS初学简单实用磨皮教程

PS初学简单实用磨皮教程 先看一下对比 1.打开图片,"ctrl+shift+L"自动色调,能够让图片更清晰.这个根据选择的图片进行调整,有的图片不加也许会更好哦 2.这一步一般用来处理脸部的痘痘和雀斑,可以使用"污点修复画笔工具"对人物脸部的处理,咱们选择这个图片有可能是油性皮肤或者刚运动完.不需要处理 3."ctrl+J"复杂图层命名为模糊层,点击菜单"滤镜"-"模糊"-"高斯模糊"

11--瓦片地图(一)简单实用

Cocos2DX引擎实用CCTMXTileMap类来表示瓦片地图(也就砖块地图),主要包含如下四类元素: 砖块元素:tmx文件中指定的纹理图片(理解不一定正确): 砖块拼接的图层(CCTMXLayer):这就是我们看到的背景地图,引擎以精灵CCSprite来组织砖块元素,其中包含砖块大小等诸多信息: 物体图层(CCTMXObjectGroup):可能用于组织建筑物等等 自身属性:主要是地图大小等属性. 首先需要使用Tield瓦片地图编辑器创建一个tmx格式的文件(使用教程),名称为"TileMa

github简单使用教程

github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O~.下面是我总结的一些简单使用方法,供初学者参考. ~~廖雪峰老师关于git的教程写得很好,可以百度来看看 1.注册账户以及创建仓库 要想使用github第一步当然是注册github账号了.之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Cr

转:【实用教程】阿里云服务器的配置和使用

[实用教程]阿里云服务器的配置和使用 随着网络应用的日常化,网络资源的使用已经不是专业人士或机构的专利.通过简单的学习,每个人都可以在无需硬件的情况下拥有一个甚至多个服务器,并配置属于自己的网页供人浏览.本教程基于阿里云服务器Windows服务器系统为例,通过简单的图文描述,可以让您在短时间内学会使用这个方法. 一. 创建Windows实例(租用阿里云服务器) 1.1 登陆阿里云服务器管理控制台,点击登录 如果没有帐号需要注册一个,具体过程不再赘述,注册完成后登陆控制台. 1.2 如下图所示,选

ul、li列表简单实用代码实例

ul.li列表简单实用代码实例: 利用ul和li可以实现列表效果,下面就是一个简单的演示. 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>蚂蚁部落</title> &

10个关于Android开发的实用教程

本文为致力于Android应用的开发人员精选了几个不错的实用教程,无论是初学者还是专业开发人员都应该能够从中获益.这些教程中有不少是关于绘图和地址服务运用的,另外一些则是SDK相关的.希望对大家有所帮助. 1. OpenGL ES 2.0 这里展示了如何创建一个简单的Android应用程序,通过OPGL ES 2.0 API来实现一些基本的图形操作. 2. Android 开发指导 这篇文章介绍了怎样使用Eclipse来创建Android的应用程序.这篇教程非常长,但同时也非常详细. 3. An