Open Narutocc opened 6 years ago
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
Name:<input type="text" data-bind="value:name,valueUpdate:'afterkeydown'" >
<input type="checkbox" data-bind="checked:nameVisible">
<p>
Hello,<span data-bind="text:name,visible:nameVisible"></span>
<br/>
<span data-bind="text:displayName"></span>
</p>
<button data-bind="click:changeName">Change Name</button>
</body>
<script src="node_modules/knockout/build/output/knockout-latest.js"></script>
<script>
var viewModel = {
name:ko.observable('bob'),
changeName:function(){
this.name('kev')
},
nameVisible:ko.observable(true),
}
viewModel.displayName = ko.dependentObservable(function(){
return this.name() + ' is ' + (!this.nameVisible() ? " not ":"") + "visible.";
},viewModel)
ko.applyBindings(viewModel)
</script>
</html>
页面引入
<script src="node_modules/knockout/build/output/knockout-latest.js"></script>
1. 数据声明
为保证里面使用的this指向不发生变化,最好写成函数的写法
这样可以使共用逻辑的两个部分数据都有独立的空间
2. 定义数据
第二个参数必须是js对象,如果是使用jq获取的元素要转化成原生对象[0]
3. 通过 data-bind 绑定数据
data-bind里面有多个属性中间用逗号隔开
4. 数据双向绑定
这种绑定只有input在失去焦点时视图层对应数据才会改变 解决方法: 第一:使用textInput代替value
这样在值的改变过程中视图层直接发生变化 第二:使用valueUpdate: 'afterkeydown'
5. visible binding(元素只是隐藏)
也可以直接三元表达式的运算
6. text binding
绑定的是文本就使用text属性
7. html binding
8. css binding 对象写法
9. style binding 对象写法
10. attr binding
可以代替css跟style语法
11. foreach
数据:数组
数据:数组里面对象
两层循环 数据:数组嵌套数组
另外一种写法:注释型
跟ember框架一样,as后面是自定义,此处后面数据用 $row. 代替
12. if && ifnot (元素会消失)
13. with
数据:对象嵌套
$root:返回根部数据 $parent:返回上一层父级数据
14. 事件
事件只有点击事件才可以在data-bind后面写click,其他事件都是通过event书写。
15. hasFocus
16. checked
通过value值绑定,checkArray为true的只有zhangsan/lisi,所以张三李四默认勾选状态
改变数据,checkbox的选中状态改变跟selecte的option值改变 数据
17. option
如果数据只是数组
如果数据是数组嵌套对象
使用了ko.observable()定义的数据,就表示一个方法,所以要打印出来就必须加括号,
通过value值绑定select框跟button之间的数据联系