Observables监控属性 现在已经知道如何创建一个简单的view model并且通过binding显示它的属性了。...监控属性的读操作(read) ///监控属性的读操作(read) alert(myViewModel.personAge); 监控属性的写操作(write) ///监控属性的写操作...这就需要用到依赖监控属性了 – 这些函数是一个或多个监控属性, 如果他们的依赖对象改变,他们会自动跟着改变。 ...你可以给下面的属性传入任何JavaScript对象: 1. read — 必选,一个用来执行取得依赖监控属性当前值的函数。 ...2.write — 可选,如果声明将使你的依赖监控属性可写,别的代码如果这个可写功能写入新值,通过自定义逻辑将值再写入各个基础的监控属性上。
1、Knockout.js是什么?
前言 最近一段时间在网上经常看到关于Knockout.js文章,于是自己就到官网看了下,不过是英文的,自己果断搞不来,借用google翻译了一下。...当程式码改变ViewModel属性值,其对应的输入/显示栏位元素便会自动更新;而在UI栏位填入不同内容,ViewModel的资料属性也会立刻被修改为新值。...ViewMode属性上,琐碎的实做细节蛮多的。...而不管是Silverlight/WPF或JavaScript,MVVM程式库的目标即在节省前述自行开发的工夫,只需在显示/输入元素上注明其对应的ViewModel属性,之后全部交给knockout.js...开始使用Knockout.js 如果你建立像asp.net mvc 4.0这样的Web应用程序,那么你可以不用任何操作即可以使用Knockout.js,如果你建立其他的项目或许需要引用该类库。
为了使数据显示在页面上,所有的属性都要像这样写代码。如果你的数据结构很复杂的话(例如,包含子对象或者数组),那就维护起来就相当痛苦。...observable类型的属性。...此时对之前创建的实体类对象的两个字段名称进行了修改,要与View Model中属性的名称保持一致。...会创建一个unmapped对象,只包含你之前map过的对象属性,换句话说,你在view model上手工添加的属性或者函数都会被忽略的,唯一例外的是_destroy属性是可以unmapped回来的,因为你从...ko.observableArray里destroy一个item项的时候会生成这个属性。
当用户编辑表单控件的时候, view model对应的属性值会自动更新。同样,当你更新view model属性的时候,相对应的元素值在页面上也会自动更新。...更新observable和non-observable属性值 如果你用value绑定将你的表单元素和你的observable属性关联起来,KO设置的2-way的双向绑定,任何一方改变都会更新另外一方的值...但是,如果你的元素绑定的是一个non-observable属性(例如是一个原始的字符串或者JavaScript表达式) ,KO会这样执行: 1.如果你绑定的non-observable属性是简单对象...,例如一个常见的属性值,KO会设置这个值为form表单元素的初始值,如果你改变form表单元素的值,KO会将值重新写回到view mode的这个属性。...2.如果你绑定的non-observable属性是复杂对象,例如复杂的JavaScript 表达式或者子属性,KO也会设置这个值为form表单元素的初始值,但是改变form表单元素的值的时候,KO不会再写会
如果参数是监控属性observable的,那元素的options项将根据参数值的变化而更新,如果不是,那元素的value值将只设置一次并且以后不在更新。...这时候你需要设置这个对象的那个属性作为drop-down列表或multi-select列表的text来显示。设置额外的参数optionsText将对象的属性名countryName作为显示的文本。...如果不想仅仅显示对象的属性值作为每个item项的text值,那你可以设置optionsText 为JavaScript 函数,然后再函数里通过自己的逻辑返回相应的值(该函数参数为item项本身)。...optionsValue 和optionsText类似, 你也可以通过额外参数optionsValue来声明对象的那个属性值作为该的value值。
click绑定在DOM元素上添加事件句柄以便元素被点击的时候执行定义的JavaScript 函数。大部分是用在button,input和连接a上,但是可以在任意...
简单说,将一对象放在observableArray 里不会使这个对象本身的属性变化可监控的。当然你自己也可以声明这个对象的属性为observable的,但它就成了一个依赖监控对象了。...的元素并将被删除元素作为一个数组返回 myObservableArray.remove(function (item) { return item.age < 18;}) ;//删除所有age属性小于
当用户check或者uncheck这个checkbox的时候,KO会将view model的属性值相应地设置为true或者false。...对于radio buttons,KO只有当参数值等于radio button value属性值的时候才设置元素为checked状态。所以参数应是字符串。...在上面的例子里只有当view model 的spamFlavor 属性等于“almond”的时候,该radio button才会设置为checked。...当然,最有用的是设置一组radio button元素对应到一个单个的view model 属性。...如果参数是监控属性observable的,那元素的checked状态将根据参数值的变化而更新,如果不是,那元素的value值将只设置一次并且以后不在更新。
ko.applyBindings(viewModel); KO将参数值会设置在元素的innerText (IE)或textContent(Firefox和其它相似浏览器)属性上...如果参数是监控属性observable的,那元素的text文本将根据参数值的变化而更新,如果不是,那元素的text文本将只设置一次并且以后不在更新。 ...使用函数或者表达式来决定text值 继续在上面的ViewModel中添加一个属性,并且添加一个依赖监控属性 price: ko.observable(24.95) viewModel.priceRating...如果你想编写如下的代码的话,那Knockout将不起任何作用: 导航 1.KnockoutJs官网学习(简单了解和入门) 2.Knockout.Js官网学习(监控属性Observables) 3
如果参数是监控属性observable的,那元素的visible状态将根据参数值的变化而变化,如果不是,那元素的visible状态将只设置一次并且以后不在更新。...///向myValues数组中 添加一个项 ko.applyBindings( AppViewModel); 在ViewModel中添加了一个myValues的属性值...导航 1.KnockoutJs官网学习(简单了解和入门) 2.Knockout.Js官网学习(监控属性Observables) 3.Knockout.Js官网学习(数组observable)
如果参数是依赖监控属性observable数组,那元素的已选择项selected options项将根据参数值的变化(通过push,pop,或其它observable数组方法)而更新,如果不是,那元素的已选择项...uniqueName绑定 uniqueName绑定确保所绑定的元素有一个非空的name属性。如果该元素没有name属性,那绑定会给它设置一个unique的字符串值作为name属性。...1.在使用KO的时候,一些技术可能依赖于某些元素的name属性,尽快他们没有什么意义。例如,jQuery Validation验证当前只验证有name属性的元素。...2.IE 6下,如果radio button没有name属性是不允许被checked了。大部分时候都没问题,因为大部分时候radio button元素都会有name属性的作为一组互相的group。
KO设置该参数值到元素的innerHTML属性上,元素之前的内容将被覆盖。...如果参数是监控属性observable的,那元素的内容将根据参数值的变化而更新,如果不是,那元素的内容将只设置一次并且以后不在更新。...(注:如果你不想应用CSS class而是想引用style属性的话,请参考style绑定。)...记得还写了一个css样式 .profitWarning { color: red; } 该参数是一个JavaScript对象,属性是你的CSS class名称,值是比较用的true或false...: isSevere }"> 如果参数是监控属性observable的,那随着值的变化将会自动添加或者删除该元素上的CSS class。
使用ignore忽略不需要map的属性 如果在map的时候,你想忽略一些属性,你可以使用ignore累声明需要忽略的属性名称集合: var data = {"name":"aehyok","age...ko.mapping.defaultOptions().ignore; ko.mapping.defaultOptions().ignore = ["alwaysIgnoreThis"]; 使用include声明需要map的属性...默认情况下,当map你的view model回到JS对象是时候,只map原始view model里拥有的属性(除了例外的_destroy属性),不过,你可以使用include参数来定制: var mapping...ko.mapping.defaultOptions().include; ko.mapping.defaultOptions().include = ["alwaysIncludeThis"]; 使用copy来复制属性...默认情况下,map的时候是把所有的值都转换成observable的,如果你只是想copy属性值而不是替换成observable的,你可以将属性名称添加到copy数组: var mapping = {
我们都知道,在foreach binding中,使用$index可以得到基于0的索引序号,但在列表显示中,我们更希望这个索引是从1开始的,怎么处理呢?
当然,如果你更新了view model的属性,Knockout会自动帮你更新相关的UI元素的。...不过,很多开发人员还是喜欢使用一种好用而不是每次都写代码的方式来转化数据到view model上,尤其是view model有很多属性或者嵌套的数据结构的时候,这很有用,因为可以节约很多代码量。
doSomething: function (formElement) { alert(formElement[0].outerHTML); } 简单的viewModel属性
enable绑定使DOM元素只有在参数值为 true的时候才enabled。在form表单元素input,select,和textarea上非常有用。
通过调试你可以发现viewModel中的属性已经发生相应的变化更新。 于是,name像我们期望的一样更新了,但是在children数组里,子项Alicw被删除而新项Alicws被添加到数组里。...} } }; ko.mapping.fromJS(data, mapping, viewModel); 这样,每次map的时候,mapping插件都会检查数组项的id属性来判断这个数组项是需要合并的还是全新...JavaScript对象,包含如下: data: JavaScript对象,包含child用到的数据 parent:child对象所属的父对象或者数组 如果你想让初始的JavaScript对象带有额外的依赖属性...参数是一个JavaScript对象,包含如下内容: data:JavaScript对象,包含child用到的数据 parent:child对象所属的父对象或者数组 observable:如果属性是
该参数是一个JavaScript对象,属性是你的style的名称,值是该style需要应用的值。 你可以一次设置多个style值。...你可以设置img的src属性,连接的href属性。使用绑定,当模型属性改变的时候,它会自动更新。...呈现结果是该连接的href属性被设置为year-end.html, title属性被设置为Report including final year-end statistics 该参数是一个JavaScript...对象,属性是你的attribute名称,值是该attribute需要应用的值。...应用的属性名字不是合法的JavaScript变量命名 如果你要用的属性名称是data-something的话,你不能这样写: <div data-bind="attr: { data-something
领取专属 10元无门槛券
手把手带您无忧上云