Rob*_*ner 7 html data-binding knockout.js
我正在尝试构建一个三步下拉系列.我能想到的最简单的例子是构建一年/制造/模型下拉集.
我试过跟随这个例子并使用另一个小提琴(另一个小提琴url以jsfiddle.net/rniemeyer/V2gvT/结尾),但是我遇到了数据绑定问题.
我的小提琴有一个使用年份/品牌/模型对象的静态列表,年份列表正确绑定,但永远不会将品牌/模型列表添加到数据绑定.
简单标记
<label for="ddlYear">Year</label>
<select id="ddlYear" data-bind="options: years, value: selectedYear"></select>
<label for="ddlMake">Make</label>
<select id="ddlMake" data-bind="options: makes, value: selectedMake'"></select>
<label for="ddlModel">Model</label>
<select id="ddlModel" data-bind="options: models"></select>
Run Code Online (Sandbox Code Playgroud)
脚本
var viewModel = {
selectedYear: ko.observable(""),
selectedMake: ko.observable(""),
selectedModel: ko.observable("")
};
viewModel.years = ko.dependentObservable(function() {
return Enumerable.From(makeModelList).Select(function(it) {
return it.year;
}).OrderBy(function(it) {
return it.year;
}).Distinct().ToArray();
}, viewModel);
viewModel.makes = ko.dependentObservable(function() {
var selectedYear = this.selectedYear();
return Enumerable.From(makeModelList).Where(function(it) {
return it.year == selectedYear;
}).Select(function(it) {
return it.make;
}).ToArray();
}, viewModel);
viewModel.models = ko.dependentObservable(function() {
var selectedYear = this.selectedYear();
var selectedMake = this.selectedMake();
return Enumerable.From(makeModelList).Where(function(it) {
return it.year == selectedYear;
}).Where(function(it) {
return it.make == selectedMake;
}).Select(function(it) {
return it.model;
}).ToArray();
}, viewModel);
ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)
数据在脚本块窗口中定义
var makeModelList = [
{
year: 1984,
make: 'Chevrolet',
model: 'Camaro'},
Run Code Online (Sandbox Code Playgroud)
等等
试图让它尽可能简单,但不能完全弄清楚为什么选择数据绑定像我试图模仿的例子.
Art*_*tem 10
你有不必要的'在这一行(在selectMake之后):
<select id="ddlMake" data-bind="options: makes, value: selectedMake'"></select>
Run Code Online (Sandbox Code Playgroud)
只是删除它.
固定小提琴 - http://jsfiddle.net/Yrkbd/8/