Knockout2.x开发 第十六章:表单域Form fields:options绑定、selectedOptions绑定、uniqueName绑定
2013-05-03 17:47 阅读(185)

"options" 绑定

options 绑定 只能用于<select> 元素上,用于控制下拉列表显示,关联的数据应是数组(或者是observable数组),与下拉列表项对应。即:对于数组的每个元素,KO都会将它作为一个 <option> 添加到<select> 里。


基本用法

Html代码

<p>请选择所在国家: <select data-bind="options: availableCountries"></select></p>
Js代码
var viewModel = {
	    availableCountries : ko.observableArray(['France', 'Germany', 'Spain']) 
	};
viewModel.availableCountries.push('China'); // Adds another option
ko.applyBindings(viewModel);

对于字符串数组,ko会将optionText 和optionValue 设为相同值。

多选列表用法


Html代码

<p>请选择所在国家: <select data-bind="options: availableCountries"  size="5" multiple="true"></select></p>
Js代码

var viewModel = {
	    availableCountries : ko.observableArray(['France', 'Germany', 'Spain']) // These are the initial options
	};
viewModel.availableCountries.push('China'); // Adds another option
ko.applyBindings(viewModel);

options为对象数组用法


对于使用字符串数组,此时ko默认会将optionText 和optionValue设为相同值。如果我们想对二者单独设置,那么就需要建立个对象数组,然后配合ko的optionsTextoptionsValue绑定即可。

另外,还可以配合value绑定来设置下拉列表的当前选定项。

Html代码

<p>
   选择所在国家:
   <select data-bind="options: availableCountries, optionsValue: 'countryPopulation', optionsText: 'countryName', value: selectedCountry, optionsCaption: '--请选择--'"></select>
</p>
Js代码

    var country = function(name, population) {
	    this.countryName = name;
		this.countryPopulation = population;
	};
	
	var viewModel = {
	    availableCountries : ko.observableArray([
		    new country("UK", 65000000),
			new country("USA", 320000000),
			new country("Sweden", 29000000)
		]),
		selectedCountry : ko.observable("320000000")//设置"USA"为当前选定项
	};
	ko.applyBindings(viewModel);



"selectedOptions" 绑定

"selectedOptions"绑定是配合"options"绑定使用的,用于在多选列表中设置默认选定项。

Html代码

<p>
   <select data-bind="options: availableCountries, selectedOptions: chosenCountries" size="5" multiple="true"></select>
</p>
<a href="javascript:void(0)"  onClick="selectedNumber()">查看已选定项数量</a>
Js代码

<script type="text/javascript">
    var viewModel = {
	    availableCountries : ko.observableArray(['France', 'Germany', 'Spain']),
		chosenCountries : ko.observableArray(['Germany'])
	};
	viewModel.chosenCountries.push('France'); 
	ko.applyBindings(viewModel);
</script>

<script type="text/javascript">
function selectedNumber(){    
    alert(viewModel.chosenCountries().length);
}
</script>
chosenCountries被设置为依赖监控的(observable)数组,那么会随着下拉列表选定项的改变同步更新。可以通过上面"查看已选定项数量"按钮进行验证。



"uniqueName" 绑定

这个绑定我平时一般使用的比较少,它用来生成一个不重复的唯一的name属性。一般用于以下场景

  • 在前台进行列表编辑、批量新增的时候,用于生成一个唯一键,作为编辑item的标识
  • 在IE6下,radiobutton必须有name才可以下拉。
  • 一些验证插件,如jquery.validate,要求DOM元素必须有name


基本用法

Html代码

<input data-bind="value: someModelProperty, uniqueName: true" />
Js代码:无