"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的optionsText和optionsValue绑定即可。
另外,还可以配合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代码:无