KnockOut.js实战(1)

大家应该使用vue,angular,react比较多,但是在某种特定情况下需兼容ie(尽管ie已经废除,但不排除用户必须要求使用ie),下面记录本人项目实战使用ko。

Knockout是微软出品,是MVVM模型领域内的先驱,使用函数偷龙转凤,最短编辑长度算法实现DOM的同步,兼容IE6。

Knockout是一个JS的MVVM模式的实现,Knockout是建立在3个核心功能之上:

	1.属性监控与依赖追踪
	2.声明式绑定
	3.模板机制

其他优点:

	1.纯JavaScript库-兼容任何服务器和客户端技术。
	2.可以很好的应用到已有的应用程序中-而不需要程序主要架构发生变化。
	3.简洁-采用Gzip压缩之后只要13K。
	4.兼容任何主流浏览器-(IE 6+, Firefox 2+, Chrome, Safari, 及其他)
	5.一套全面完整的规范(采用行为驱动开发)-这意味着在新的浏览器或平台中也能够很容易验证通过。

其实ko和vue用法非常类似,直接上简单的demo code!

1.单向绑定

<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Demo1-单向绑定</title>
    <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/376/pbcx3e1z/knockout-3.4.0.js"></script>
</head>
    <body>
        <!--单向绑定-->
        <div>
            <p>First name: <strong data-bind="text: firstName"></strong></p>
            <p>Last name:  <strong data-bind="text: lastName"></strong></p>
            <p>First name: <input data-bind="value: firstName" /></p>
            <p>Last name:  <input data-bind="value: lastName" /></p>
        </div>
    
        <!--这段脚本实际项目中应该放在对应的JS文件中,然后在html中通过Script标签来引用即可-->
        <!--JS代码也就是业务逻辑部分,将业务逻辑与Html代码分割开,使得View代码更加简洁,这样后期也易于维护-->
        <script type="text/javascript">
            function ViewModel() {
                this.firstName = "Tommy";
                this.lastName = "Li";
            }
            ko.applyBindings(new ViewModel());
        </script>
    </body>
</html>

上面的例子只是完成了单向绑定的操作。即在上面的例子你会发现,当改变input标签中的值并离开焦点时,上面的值不会更新。其实,KnockoutJS中自动更新功能不会自动添加的,需要对应的函数支持,这个函数就是observable函数,下面具体看看双向绑定的例子:

2.双向绑定

<!DOCTYPE html>
 
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Demo2-双向绑定</title>
    
    <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/376/pbcx3e1z/knockout-3.4.0.js"></script>
</head>
<body>
    <!--双向绑定-->
    <div>
        <p>First name: <strong data-bind="text: firstName"></strong></p>
        <p>Last name:  <strong data-bind="text: lastName"></strong></p>
        <p>First name: <input data-bind="value: firstName"/></p>
        <p>Last name:  <input data-bind="value: lastName" /></p>
    </div>
 
    <script type="text/javascript">
        function ViewModel() {
            this.firstName = ko.observable("Tommy");
            this.lastName = ko.observable("Li");
        }
        
        ko.applyBindings(new ViewModel());
    </script>
</body>
</html>

3.依赖跟踪

接下来让我们看下如何使用KO中的computed函数来完成依赖跟踪。具体例子的实现代码如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Demo3-依赖跟踪</title>
   
    <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/376/pbcx3e1z/knockout-3.4.0.js"></script>
</head>
<body>
    <!--双向绑定-->
    <div>
        <p>First name: <strong data-bind="text: firstName"></strong></p>
        <p>Last name:  <strong data-bind="text: lastName"></strong></p>
        <p>First name: <input data-bind="value: firstName" /></p>
        <p>Last name:  <input data-bind="value: lastName"/></p>
        <p>Full name:  <strong data-bind="text: fullName"></strong></p>
        <button data-bind="click: capitalizeLastName">LastName To Upper</button>
    </div>
 
    <script type="text/javascript">
        function ViewModel() {
            this.firstName = ko.observable("Tommy");
            this.lastName = ko.observable("Li");
            // 依赖跟踪
            this.fullName = ko.computed(function () {
                return this.firstName() + " " + this.lastName();
            },this);
            
            // 通过代码改变observable的值
            this.capitalizeLastName = function() {
                this.lastName(this.lastName().toUpperCase());
            };
        }
 
        ko.applyBindings(new ViewModel());
    </script>
</body>
</html>

其实ko和三大框架非常相似,也容易上手,后面会慢慢更新比较复杂一点的逻辑!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值