您的位置:首页 > Web前端 > JavaScript

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

2014-05-09 13:32 435 查看
一、uniqueName 绑定

uniqueName绑定确保所绑定的元素有一个非空的name属性。如果该元素没有name属性,那绑定会给它设置一个unique的字符串值作为name属性。你不会经常用到它,只有在某些特殊的场景下才用到,例如:

在使用KO的时候,一些技术可能依赖于某些元素的name属性,尽快他们没有什么意义。例如,jQuery Validation验证当前只验证有name属性的元素。为配合Knockout UI使用,有些时候需要使用uniqueName绑定避免让jQuery Validation验证出错。

IE 6下,如果radio button没有name属性是不允许被checked了。大部分时候都没问题,因为大部分时候radio button元素都会有name属性的作为一组互相的group。不过,如果你没声明,KO内部会在这些元素上使用uniqueName那么以确保他们可以被checked。

<input data-bind="value: someModelProperty, uniqueName: true"/>


主参数

就像上面的例子一样,传入true(或者可以转成true的值)以启用uniqueName绑定。

二、options绑定

options绑定控制什么样的options在drop-down列表里(例如:<select>)或者 multi-select 列表里 (例如:<select size='6'>)显示。此绑定不能用于<select>之外的元素。关联的数据应是数组(或者是observable数组),<select>会遍历显示数组里的所有的项。

注:对于multi-select列表,设置或者获取选择的多项需要使用selectoptions绑定。对于single-select列表,你也可以使用value绑定读取或者设置元素的selected项。

<select data-bind="options: ,optionsText: ' ',value: ,optionsCaption:' ' "></select>

<select data-bind=".......,optionsText: function(item){return item.name+item.age;}"></select> // 此处item是当前选项本身

参数:

1、主参数options:该参数是一个数组,或者observable数组,对每个选项,ko都将它作为一个<option>添加到<select>里,之前的options都将被删除。

如果该参数是一个string数组,则不需要再申明任何其他参数,<select>会将灭个string显示为一个option。但是如果让用户选择的是js对象数组,不仅仅是string,就需要设置optionsText和optionsValue两个参数了。

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

2、optionsCaption

有时候,默认情况下不想选择任何option项。但是single-select drop-down列表由于每次都要默认选择以项目,怎么避免这个问题呢?常用的方案是加一个“请选择的”或者“Select
an item”的提示语,或者其它类似的,然后让这个项作为默认选项。

我们使用optionsCaption参数就能很容易实现,它的值是字符串型,作为默认项显示。例如:

<select data-bind='options: myOptions, optionsCaption: "Select an item...", value: myChosenValue'></select>

KO会在所有选项上加上这一个项,并且设置value值为undefined。所以,如果myChosenValue被设置为undefined(默认是observable的),那么上述的第一个项就会被选中。

3、optionsText

上面的例3展示的绑定JavaScript对象到option上 – 不仅仅是字符串。这时候你需要设置这个对象的那个属性作为drop-down列表或multi-select列表的text来显示。例如,例3中使用的是设置额外的参数optionsText将对象的属性名countryName作为显示的文本。

如果不想仅仅显示对象的属性值作为每个item项的text值,那你可以设置optionsText 为JavaScript 函数,然后再函数里通过自己的逻辑返回相应的值(该函数参数为item项本身)。例4展示的就是返回item的2个属性值合并的结果。

4、selectedOptions

对于multi-select列表,你可以用selectedOptions读取和设置多个选择项。技术上看它是一个单独的绑定,有自己的文档,请参考: selectedOptions绑定。

注:已经被选择的项会再options改变的时候保留

当使用options绑定<select>元素的时候,如果options改变,KO将尽可能第保留之前已经被选择的项不变(除非是你事先手工删除一个或多个已经选择的项)。这是因为options 绑定尝试依赖value值的绑定(single-select列表)和selectedOptions绑定(multi-select列表)。

5、optionsValue

和optionsText类似,也可以通过额外参数OptionsValue来声明对象的那个属性值作为该<option>的value值。

如:在更新options的时候想保留原来的已经选择的项。当多次调用Ajax获取car列表的时候,要确保已经选择的某个car一直都是被选择上,就需要设置optionsValue为"carId"或者其他的unique标识符,否则的话ko不知道之前选择的 car是新options里的哪一项。

问题:option的value值未发生改变。optionsValue是option的value吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: