当前位置: 首页 > 工具软件 > Knockout.js > 使用案例 >

(更新)knockout.js学习——1.3例子——绑定的详细语法

缑兴贤
2023-12-01

一、value 绑定

value绑定是关联DOM元素的值到view model的属性上。主要是用在表单控件<input>,<select>和<textarea>上。

当用户编辑表单控件的时候, view model对应的属性值会自动更新。同样,当你更新view model属性的时候,相对应的元素值在页面上也会自动更新。

注:如果你在checkbox或者radio button上使用checked绑定来读取或者写入元素的 checked状态,而不是value 值的绑定。

参数

    主参数

    KO设置此参数为元素的value值。之前的值将被覆盖。

    如果参数是监控属性observable的,那元素的value值将根据参数值的变化而更新,如果不是,那元素的value值将只设置一次并且以后不在更新。

    如果你提供的参数不是一个数字或者字符串(而是对象或者数组)的话,那显示的value值就是yourParameter.toString() 的内容(通常没用,所以最好都设置为数字或者字符串)。 

    不管什么时候,只要你更新了元素的值,那 KO都会将view model对应的属性值自动更新。默认情况下当用户离开焦点(例如onchange事件)的时候,KO才更新这个值,但是你可以通过第2个参数valueUpdate来特别指定改变值的时机。

    其它参数

        valueUpdate

        如果你使用valueUpdate参数,那就是意味着KO将使用自定义的事件而不是默认的离开焦点事件。下面是一些最常用的选项:

            “change”(默认值) - 当失去焦点的时候更新view model的值,或者是<select> 元素被选择的时候。

            “keyup” – 当用户敲完一个字符以后立即更新view model。

            “keypress” – 当用户正在敲一个字符但没有释放键盘的时候就立即更新view model。不像 keyup,这个更新和keydown是一样的。

            “afterkeydown” – 当用户开始输入字符的时候就更新view model。主要是捕获浏览器的keydown事件或异步handle事件。

        上述这些选项,如果你想让你的view model进行实时更新,使用“afterkeydown”是最好的选择。

keypress/keydown:写完第二个字符显示第一个字符

keyup/afterkeydown:写完一个字符显示一个字符


二、checked绑定

type="radio"和type="check"的元素。

 checked绑定是关联到checkable的form表单控件到view model上 - 例如checkbox(<input type='checkbox'>)或者radio button(<input type='radio'>) 。当用户check关联的form表单控件的时候,view model对应的值也会自动更新,相反,如果view model的值改变了,那控件元素的check/uncheck状态也会跟着改变。

注:对text box,drop-down list和所有non-checkable的form表单控件,用value来读取和写入是该元素的值,而不是用hecked绑定。

    // viewModel.spamFlavors('msg'); //用这种在外面viewmodel.spamFlavors('')加上参数的方法写可观测值spamFlavors
    //使用viewModel.spamFlavors.push。在spamFlavors后面不带括号。
    //因为在viewmodel里面,不能显式的调用自己来push,所以写在viewmodel的外面,用viewmodel.spamFlavors
    //viewModel.spamFlavors.push('msg');


    一、 checkbox: 对于checkbox,当参数为true的时候,KO会设置元素的状态为checked,相反则设置为unchecked。如果你传的参数不是布尔值,那KO将会解析成布尔值。也就是说非0值和非null对象,非空字符串将被解析成true,其它值都被解析成false。当用户check或者uncheck这个checkbox的时候,KO会将view model的属性值相应地设置为true或者false。

      个特殊情况是参数是一个数组,如果元素的值(value)存在于数组,KO就会将元素设置为checked,如果数组里不存在,就设置为unchecked。如果用户对checkbox进行check或uncheck,KO就会将元素的值添加数组或者从数组里删除。


二、radio:对于radio buttons,KO只有当参数值等于radio button value属性值的时候才设置元素为checked状态。与布尔值无关。所以参数应是字符串。在上面的例子里只有当view model 的spamFlavor 属性等于“almond”的时候,该radio button才会设置为checked。

         当用户将一个radio button选择上的时候 is selected,KO会将该元素的value属性值更新到view model属性里。上面的例子,当点击value= “cherry”的选项上, viewModel.spamFlavor的值将被设置为“cherry”。

         当然,最有用的是设置一组radio button元素对应到一个单个的view model 属性。确保一次只能选择一个radio button需要将他们的name属性名都设置成一样的值(例如上个例子的flavorGroup值)。这样的话,一次就只能选择一个了。

         如果参数是监控属性observable的,那元素的checked状态将根据参数值的变化而更新,如果不是,那元素的value值将只设置一次并且以后不在更新。


总结:

1、在类型为checkbox时,可以用true,false和数组ko.observableArray(["",""})。可以用viewMOdel.fun.push("");

注意:不是ko.observableArray([","}),不是ko.observableArray([""],[""]})。不是viewMOdel.fun.push([""]);不是viewMOdel.fun().push("");

2、在类型为radio时,只能用对应值得方式。不能用布尔值来绑定"checked"。不对应数组参数,可以用viewModel.fun("")的方式。

       如果想要一次只能选择一个radio,可以用name值一样来实现。

注意:不是viewModel.fun.push("")。是viewModel.fun("")覆盖了viewModel里面的值。

应该是没有说明一组raido可以同时选择,只是针对多个radio只选择一个的情况:所以在viewModel中没有ko.observableArray(),没有增加一个元素到数组,只有覆盖:viewModel.fun("")




 类似资料: