博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KO学习重点
阅读量:5314 次
发布时间:2019-06-14

本文共 2314 字,大约阅读时间需要 7 分钟。

总结了一些knockout知识点

绑定模型

ko.applyBindings(viewModel);//全局应用
ko.applyBindings(viewModel, DOM元素);//局部应用

 

赋值

var vModel={

this.firstName=ko.observable();

};
vModel.firstName();
vModel.firstName("newValue");

 

订阅改动事件

vModel.firstName.subscribe();
vModel.firstName.subscribe(function(newValue){alert("Changed: "+newValue);});

删除订阅

var subscription=vModel.firstName.subscribe(function(newValue){});
subscription.dispose();

 

ko.computed用法1(传入this的方式)

var vModel={
         this.firstName=ko.observable();
         this.lastName=ko.observable();
         this.fullName=ko.computed(function(){
                                                                        return this.firstName()+" "+ this.lastName();
                                                                }, this);//需要注意这个this的传入
};

 

ko.computed用法1(不传入this的方式)

function viewModel()

{

         var self=this;//关键点
         self.firstName=ko.observable();
         self.lastName=ko.observable();
         self.fullName=ko.computed(function(){
                                                                        return self.firstName()+ " "+ self.lastName();
                                                               });
}

//对于ko.computed属性的读写分离写法
this.fullName=ko.computed({
                                             read:function(){return xxxxxxxxxxx;},
                                             write:function(value){//分解value,保存到firstName, lastName},
                                             owner: this
                                         }); 

 

判断模型属性的几个函数

ko.isComputed
ko.isObservable
ko.isWritableObservable

 

 

KO模版:foreach

<table>
<tbody data-bind="foreach: people">
     <tr>
          <td data-bind="text: firstName"></td>
          <td data-bind="text: lastName"></td>
     </tr>
</tbody>
</table>
<script>
               var peopleList=ko.observableArray([
                                                                           {firstName:"xxxx1", lastName:"yyyyyy1"},
                                                                           {firstName:"xxxx2", lastName:"yyyyyy2"}
                                                                   ]);
               var vModel= {
                                                                   people=ko.observableArray(peopleList)
                                  };
               ko.applyBindings(vModel);
</script>

 

foreach的as用法,犹如asp.net中的多个repeater,就是定义一个别名

foreach的注释循环写法

foreach的AOP,(加入效果,jQuery),就是模版方法的before, after等之类的前后事件的处理

 

模版:  if: 变量名,没有容器的写法(注释写法)

<!-- ko if: someExpressionGoesHere -->

<!-- /ko -->
<!-- ko foreach: items -->
<!-- /ko -->

 

with用法,和vb中的一样的目的

 

阻止事件的向上传递: clickBubble:false

data-bind="click: fnName, clickBubble:false"

 

form的submit能检测到回车事件,因此不用click事件

<form data-bind="submit: validateInput">
            xxx
            <input type="submit" value="OK"/>
</form>

 

模型属性的实时跟踪

data-bind="value: v1, valueUpdate:'afterkeydown'"

 

自定义Binding

 

JSON

ko.toJS,将observable的模型拷贝成没有observable的js对象
ko.toJSON,调用ko.toJS,然后利用浏览器本身的JSON.serialize函数把js对象转换为json字符串
如果浏览器不支持本地JSON,则需要引用json2.js,才能让ko.toJSON函数正常

从server得到json数据后的操作:
var parsed = JSON.parse(someJSON);
vModel.firstName(parsed.firstName);

 

 

正在解读ko的源码中,敬请期待。。。哈哈

转载于:https://www.cnblogs.com/aarond/archive/2013/03/29/knockout.html

你可能感兴趣的文章
【转】深入浅出ShellExecute
查看>>
常见ES5方法
查看>>
缓存,队列(Redis,RabbitMQ)
查看>>
破解Java to C# Converter
查看>>
【codeforces 534B】Covered Path
查看>>
给图片添加标签
查看>>
1413确定进制
查看>>
linux 压缩文件的命令总结
查看>>
Mac上Homebrew的使用 (Homebrew 使 OS X 更完整)
查看>>
ProSolid下的遍历访问封装代码
查看>>
添加ASP.NET网站资源文件夹
查看>>
我们是如何通过全球第一免费开源ERP Odoo做到项目100%交付
查看>>
httpModules 与 httpHandlers
查看>>
本机Font字体
查看>>
html常用标签(form标签)
查看>>
综合练习:词频统计
查看>>
从服务器上的数据库备份到本地
查看>>
Tabcontrol动态添加TabPage(获取或设置当前选项卡及其属性)
查看>>
面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)
查看>>
LeetCode Algorithm 03_Longest Substring Without Repeating Characters
查看>>