标签:
Knockout有如下4大重要概念:
重要特性:
当参数设置为一个假值时(例如:布尔值false, 数字值0, 或者null, 或者undefined) ,该绑定将设置该元素的style.display值为none,让元素隐藏。它的优先级高于你在CSS里定义的任何display样式
。
当参数设置为一个真值时(例如:布尔值true,或者非空non-null的对象或者数组) ,该绑定会删除该元素的style.display值,让元素可见。然后你在CSS里自定义的display样式将会自动生效
。
如果参数是监控属性observable的,那元素的visible状态将根据参数值的变化而变化,如果不是,那元素的visible状态将只设置一次并且以后不在更新。 注:使用函数或者表达式来控制元素的可见性
KO将参数值会设置在元素的innerText (IE)或textContent(Firefox和其它相似浏览器)属性上。原来的文本将会被覆盖。
如果参数是监控属性observable的,那元素的text文本将根据参数值的变化而更新,如果不是,那元素的text文本将只设置一次并且以后不在更新。
如果你传的不是数字或者字符串(例如一个对象或者数组),那显示的文本将是yourParameter.toString()的等价内容。(object)
注1:使用函数或者表达式来决定text值 如果你想让你的text更可控,那选择是创建一个依赖监控属性(dependent observable), 然后在它的执行函数里编码,决定应该显示什么样的text文本。 注2:关于HTML encoding 设置元素的innerText或textContent (而不是innerHTML) 关于IE 6的白空格whitespace
Welcome, <span data-bind="text: userName"></span> to our web site.
->Welcome, <span data-bind="text: userName"> </span> to our web site.
html绑定到DOM元素上,使得该元素显示的HTML值为你绑定的参数。如果在你的view model里声明HTML标记并且render的话,那非常有用。 KO设置该参数值到元素的innerHTML属性上,元素之前的内容将被覆盖。
该参数是一个JavaScript对象,属性是你的CSS class名称,值是比较用的true或false,用来决定是否应该使用这个CSS class。 非布尔值会被解析成布尔值。例如, 0和null被解析成false,21和非null对象被解析成true。
应用的CSS class的名字不是合法的JavaScript变量命名 如果你想使用my-class 在my-class两边加引号作为一个字符串使用
style绑定是添加或删除一个或多个DOM元素上的style值 该参数是一个JavaScript对象,属性是你的style的名称,值是该style需要应用的值。 你可以一次设置多个style值
应用的style的名字不是合法的JavaScript变量命名 错误: { font-weight: someValue }; 正确: { fontWeight: someValue }
错误: { text-decoration: someValue }; 正确: { textDecoration: someValue }
attr 绑定提供了一种方式可以设置DOM元素的任何属性值 该参数是一个JavaScript对象,属性是你的attribute名称,值是该attribute需要 应用的值。 应用的属性名字不是合法的JavaScript变量命名 如果你要用的属性名称是data-something的话 解决方案是:在data-something两边加引号作为一个字符串使用
click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数 注1:传参数给你的click 句柄
<button data-bind="click: function() { viewModel.myFunction(1, 2) }">
Click me
</button>
注2:访问事件源对象 myFunction: function (event) 如果你需要的话,可以使用匿名函数的第一个参数传进去,然后在里面调用: 注3: 允许执行默认事件 默认情况下,Knockout会阻止冒泡,防止默认的事件继续执行。例如,如果你点击一个a连接,在执行完自定义事件时它不会连接到href地址。这特别有用是因为你的自定义事件主要就是操作你的view model,而不是连接到另外一个页面。
当然,如果你想让默认的事件继续执行,你可以在你click的自定义函数里返回true。 注4:控制this句柄 注5:防止事件冒泡clickBubble
可以通过额外的绑定clickBubble来禁止冒泡
大部分情况下是用在keypress,mouseover和mouseout上。
View model上的函数在用的时候有一点点特殊,就是不需要引用对象的,直接引用函数本身就行了,比如直接写event: { mouseover: enableDetails } 就可以了,而无需写成: event: { mouseover: viewModel.enableDetails } (尽管是合法的)。
浏览器会执行你定义的绑定函数而不会提交这个form表单到服务器上。可以很好地解释这个,使用submit绑定就是为了处理view model的自定义函数的,而不是再使用普通的HTML form表单。如果你要继续执行默认的HTML form表单操作,你可以在你的submit句柄里返回true。
enable绑定使DOM元素只有在参数值为 true的时候才enabled。在form表单元素input,select,和textarea上非常有用。 非布尔值会被解析成布尔值。例如0和null被解析成false,21和非null对象被解析给true。
disable绑定使DOM元素只有在参数值为 true的时候才disabled。在form表单元素input,select,和textarea上非常有用。
disable绑定和enable绑定正好相反,详情请参考enable绑定。
当用户编辑表单控件的时候, view model对应的属性值会自动更新。同样,当你更新view model属性的时候,相对应的元素值在页面上也会自动更新。
其它参数 valueUpdate 如果你使用valueUpdate参数,那就是意味着KO将使用自定义的事件而不是默认的离开焦点事件。下面是一些最常用的选项: change
(默认值)
- 当失去焦点的时候更新view model的值,或者是 keyup – 当用户敲完一个字符以后立即更新view model。 keypress – 当用户正在敲一个字符但没有释放键盘的时候就立即更新view model。不像 keyup,这个更新和keydown是一样的。 afterkeydown – 当用户开始输入字符的时候就更新view model。主要是捕获浏览器的keydown事件或异步handle事件。 checked 绑定 checked绑定是关联到checkable的form表单控件到view
model上 - 例如checkbox()或者radio button() 。当用户check关联的form表单控件的时候,view model对应的值也会自动更新,相反,如果view model的值改变了,那控件元素的check/uncheck状态也会跟着改变。
options绑定控制什么样的options在drop-down列表里(例如:)或者 multi-select 列表里 (例如:)显示。此绑定不能用于之外的元素。关联的数据应是数组(或者是observable数组),会遍历显示数组里的所有的项。 optionsCaption
值是字符串型,作为默认项显示
KO会在所有选项上加上这一个项,并且设置value值为undefined。所以,如果myChosenValue被设置为undefined(默认是observable的),那么上述的第一个项就会被选中。 optionsText
列表的text来显示 optionsValue
该的value值 selectedOptions
selectedOptions绑定用于控制multi-select列表已经被选择的元素,用在使用options绑定的元素上。 uniqueName 绑定 uniqueName绑定确保所绑定的元素有一个非空的name属性。如果该元素没有name属性,那绑定会给它设置一个unique的字符串值作为name属性。 tips 循环嵌套 对象用observableArray监视
github: https://github.com/shunzizhan/knockout
标签:
原文地址:http://blog.csdn.net/u011613356/article/details/51914528