您的位置:首页 > Web前端 > JavaScript

JavaScript数据绑定databind框架knockout

2016-03-28 10:30 621 查看
Knockout是一个轻量级的UI类库,使用的是MVVM(model-view-viewModel)模式,能够让JavaScript前端简单化,用于页面的数据绑定。使用它可以减少web前端js的代码量,而且knockout轻量级,并不会增加整个页面的臃肿程度。

一、下载使用

直接到官网下载knockoutjs,下载后保存为js文件格式放在一个web目录下,然后在页面上添加<script>就可以直接使用knockoutjs的功能属性了。

如果不下载也可以,使用其他提供商的url来直接使用

<script type="text/javascript" src="http://http://knockoutjs.com/downloads/knockout-3.4.0.js"  ><script>

当然,要经常检查src是否可用。

二、简单data-bind

在页面上添加<script>之后,添加如下js代码

<p><input id="a1" data-bind="value:user" /></p>

<p><input  id="a2" data-bind="value:user" /></p>

<p>Hello, <span data-bind="text:user"></span></p>

<script type="text/javascript" src="jquery.min.js"></script>

    <script type="text/javascript" src="knockout-3.4.0.js"  ></script>

    <script type="text/javascript">

        var viewModel = function(){

            var self = this;

            self.user = ko.observable("");

        };

        var currentView = new viewModel() ;

        ko.applyBindings(currentView);

        //currentView.user("sdfe");

</script>

<input>, <span>元素添加了一个data-bind属性,这是加入knockoutjs才有。相当于绑定了数据user。由于上述三个元素绑定了同一个数据user,所以当user发生改变时,三个元素都会跟着改变。对应于不同的元素,绑定时的属性(value,text...)会有所不同。

绑定的数据是user,但user的数据是什么?后面的js代码解答了这个问题。ko是knockout的缩写同时也是对象,knockout很大一部分操作都需要通过这个对象来完成。ko.applyBindings(model),里面的参数model就是ko里面的数据源。该参数定义里面某些属性设置了ko.observable,大概的意思就是让ko能够观察,从而让其他元素能够通过ko来bind此数据。

三、dependentObservable()

从名字上看,这是声明一个依赖其他数据的数据源。添加如下代码

<p>First name: <span data-bind="text: firstName"></span></p>

<p>Last name: <span data-bind="text: lastName"></span></p>

<h2>Hello, <input data-bind="value: fullName"/>!</h2>

<script type="text/javascript" src="jquery.min.js"></script>

    <script type="text/javascript" src="knockout-3.4.0.js"  ></script>

    <script type="text/javascript">

    var viewModel = {

        firstName: ko.observable("Planet"),

        lastName: ko.observable("Earth")

    };

    viewModel.fullName = ko.dependentObservable({

        read: function () {

            return this.firstName() + " " + this.lastName();

        },

        write: function (value) {

            var lastSpacePos = value.lastIndexOf(" ");

            if (lastSpacePos > 0) { // Ignore values with no space character

                this.firstName(value.substring(0, lastSpacePos)); // Update "firstName"

                this.lastName(value.substring(lastSpacePos + 1)); // Update "lastName"

            }

        },

        owner: viewModel

    });

    ko.applyBindings(viewModel);

</script>

内容如2类似,添加了一个ko依赖可观察的数据fullName。调用dependentobservable函数,并传入了一个json对象。该json的属性有:

-read:用来执行取得依赖监控属性当前值的函数

-write:当监控数据发生改变时回调的函数

-owner:一个对象,代表上述两个函数里面的this

实现效果,当<input>输入的姓名被一个空格隔开时,姓和名被自动分隔并填充到对应的<span>上。

---------本博客内容为本人的学习总结,若有问题,请联系本人----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: