html - 使用 knockout.js 的级联下拉列表

标签 html data-binding knockout.js

<分区>

我正在尝试构建一个三步下拉系列。我能想到的最简单的例子是构建年份/品牌/型号下拉列表集。

我尝试按照 at 的示例并使用另一个 fiddle at(另一个以 jsfiddle.net/rniemeyer/V2gvT/结尾的 fiddle url),但我在数据绑定(bind)方面遇到了问题。

我的 fiddle 有一个要使用的年份/品牌/型号对象的静态列表,并且年份列表可以正确绑定(bind),但永远不会将品牌/型号列表进行数据绑定(bind)。

My Fiddle

简单标记

<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>

脚本

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);

数据在脚本 block 窗口中定义

var makeModelList = [
{
    year: 1984,
    make: 'Chevrolet',
    model: 'Camaro'},

等等

尽我所能使其尽可能简单,但无法完全弄清楚为什么选择像我试图模仿的示例那样进行数据绑定(bind)。

最佳答案

你在这一行中有不必要的 '(在 selectedMake 之后):

<select id="ddlMake" data-bind="options: makes, value: selectedMake'"></select>

只需删除它。

固定 fiddle - http://jsfiddle.net/Yrkbd/8/

关于html - 使用 knockout.js 的级联下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10707538/

相关文章:

css - 将 div 对齐到底部

html - CSS 背景图像限制为内容而不是整个页面

javascript - <tr> 的点击功能存在问题

silverlight - 如何在 Windows Phone 8 上将数据与常量字符串绑定(bind)

xml - Delphi XML 绑定(bind)向导和可选元素

silverlight - WP7 WrapPanel & MVVM

javascript - 创建一个通用类以将挖空对象与页面绑定(bind)

knockout.js - KnockoutJS - 使用条件语句计算出的可观察量如何工作

javascript - 为什么我无法获取输入值

html - 如何自定义 Bootstrap 3 选项卡颜色