具有级联和异步下拉列表的Knockoutjs

时间:2013-04-03 17:56:04

标签: knockout.js asp.net-web-api

使用VS2012,ASP.NET MVC 4项目的环境,使用Knockout 2.2.1(并且对所有人来说都是新手)。

我有三个下拉列表,我想按照顺序填充 制造商,风格,颜色

我在页面加载时从Ajax调用到WebAPI控制器填充制造商列表,因为只有大约20个。然而,Style每个制造商可能有1000个项目,所以很自然我不希望发送所有直到我知道选择了哪个制造商。此外,除非绝对必要,否则我不想发送所有样式。

理想情况下,这看起来像是我可以输入的下拉列表,并且在输入三到四个字符后会请求一个样式列表。或者,如果我不知道我正在寻找的样式名称,我可以单击下拉按钮,它将获取该制造商的所有样式。一旦我选择了它,我就可以为该制造商+风格取几种颜色。但是,我必须选择服务器发送的有效样式(在选择有效样式之前不要填​​充颜色下拉列表。)

但是那个中间Style控件是我不知道怎么做(或绑定到)的东西。或者也许我应该期望在这种情况下使用不同类型的控件(或控件)。

我的视图模型(目前不包含样式或颜色)

function vmManufacturer(id, name) {
    var self = this;
    self.id = ko.observable(id);
    self.name = ko.observable(name);
}

function vmItems() {
    var self = this;
    self.manufacturers = ko.observableArray([new vmManufacturer()]);
    self.selectedManufacturer = ko.observable();
    $.getJSON("/api/Manufacturer/", function (data) {
        $.each(data, function (key, val) {
            self.manufacturers.push(new vmManufacturer(val.id, val.name));
        });
    });
}

$(document).ready(function () {
    ko.applyBindings(new vmItems());
});

目前与模型相关的下拉菜单很简单:

<select data-bind="options: manufacturers, value: selectedManufacturer, optionsText: 'name'"></select>

任何帮助都会非常感激 - 我对这样一个简单的问题表示道歉,我只是对JS / Knockout中的事情结合起来感到不稳定。

0 个答案:

没有答案