【问题标题】:Knockout databind dropdown depending on other dropdown淘汰赛数据绑定下拉菜单取决于其他下拉菜单
【发布时间】:2014-10-14 12:55:58
【问题描述】:

我正在尝试对 2 个下拉菜单进行数据绑定,其中第二个下拉菜单取决于第一个下拉菜单中选择的内容。

我有这个数据结构:

{
EducationId: 1,
EducationCategories:[{
    Name: "Category1",
    Educations: [{
        Id: 1,
        Name: "Education1"
    }, {
        Id: 2,
        Name: "Education2"
    }]
}, {
    Name: "Category2",
    Educations: [{
        Id: 3,
        Name: "Education3"
    }, {
        Id: 4,
        Name: "Education4"
    }]
}]
}

我想通过淘汰赛将数据绑定到 2 个不同的“选择”,这样我就有 1 个包含所有类别名称的下拉列表,以及第 2 个包含教育的下拉列表。

EducationId 是指选择的教育,因此在数据示例中,第一个下拉菜单是“Category1”,第二个是“Education1”。

但是我怎样才能使第二个下拉列表只填充属于在第一个下拉列表中选择的类别的教育?然后将第二个下拉列表的值(id)绑定到 EducationId。

数据由敲除映射插件映射。

【问题讨论】:

标签: javascript data-binding knockout.js


【解决方案1】:

使用computed 属性在第一个下拉列表中的选定值更改时更新第二个下拉列表。

例如:

var data = {
    EducationId: 1,
    EducationCategories :[{
        Name: "Category name1",
        Educations: [{
            Id: 1,
            Name: "Education name1"
        }, {
            Id: 2,
            Name: "Education name2"
        }]
    }, {
        Name: "Category name2",
        Educations: [{
            Id: 3,
            Name: "Education name3"
        }, {
            Id: 4,
            Name: "Education name4"
        }]
    }]
};

var viewModel = ko.mapping.fromJS(data);

viewModel.selectedCategory = ko.observable();
viewModel.Educations = ko.computed(function() {
    if (viewModel.selectedCategory()) {
        return viewModel.selectedCategory().Educations();
    }
});
viewModel.selectedEducation = ko.observable();

ko.applyBindings(viewModel);
<script src="https:////cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="http:////cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>

<select data-bind="options: EducationCategories, value: selectedCategory, optionsText: 'Name'"></select>

<select data-bind="options: Educations, value: selectedEducation, optionsText: 'Name'"></select>

【讨论】:

  • 这几乎可以完成工作,但是在加载数据时呢?假设 EducationId = 3。那么绑定时的类别应该是 2 和教育 3。所以也许计算 selectedEducation ?还有一些如何检查它属于哪个类别?不知道怎么做?
  • 可能最简单的方法是筛选类别,直到找到具有匹配教育的类别(假设 id 在所有类别中都是唯一的)并在开始时将 selectedCategory 设置为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2016-06-09
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
相关资源
最近更新 更多