Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重置(空)knockout.js选择列表取决于其他选择列表中的选择_Javascript_Asp.net Mvc_Knockout.js - Fatal编程技术网

Javascript 重置(空)knockout.js选择列表取决于其他选择列表中的选择

Javascript 重置(空)knockout.js选择列表取决于其他选择列表中的选择,javascript,asp.net-mvc,knockout.js,Javascript,Asp.net Mvc,Knockout.js,我有两个选择列表,一个选择列表由另一个选择列表的选择填充。我已经订阅了第一个选择框的值,以便在每次值更改时更新第二个列表。我没有发现的是,如果用户在第一个列表中选择默认的“选择…”选项,如何重置第二个列表 要明确的是,该过程是有效的,除非用户选择默认选项。第二个列表在该点保留上一个选择 这是我的代码(这是一个MVC4应用程序) 视图模型: var DashboardReportViewModel = function (config, originalData) { var self =

我有两个选择列表,一个选择列表由另一个选择列表的选择填充。我已经订阅了第一个选择框的值,以便在每次值更改时更新第二个列表。我没有发现的是,如果用户在第一个列表中选择默认的“选择…”选项,如何重置第二个列表

要明确的是,该过程是有效的,除非用户选择默认选项。第二个列表在该点保留上一个选择

这是我的代码(这是一个MVC4应用程序)

视图模型:

var DashboardReportViewModel = function (config, originalData) {
    var self = this;

    self.breweryCode = ko.observable();
    self.lineCode = ko.observable();
    self.GetBreweries = ko.observableArray([]);
    self.GetLines = ko.observableArray([]);

    var loadBreweries = function () {
        $.ajax({
            url: config.GetBreweries,
            type: "GET",
            error: function (xhr, status, error) {
                alert('loadBreweries error');
            },
            success: function (data) {
                self.GetBreweries(data);
            },
            cache: false
        });
    };

    var loadLines = function () {
        $.ajax({
            url: config.GetLines,
            data: { breweryCode: self.breweryCode() },
            cache: false,
            type: "GET",
            error: function (xhr, status, error) {
                alert('loadLines error');
            },
            success: function (data) {
                self.GetLines(data);
            }
        });
    }

    loadBreweries();
    self.breweryCode.subscribe(function () {
        if (self.breweryCode() != undefined) {
            loadLines();
        }
    });
};
视图:

<select class="ui-select" id="BrewerySelect" name="BrewerySelect" data-bind="options: GetBreweries,
                                                                                             optionsText: 'Text',
                                                                                             optionsValue: 'Value',
                                                                                             value: breweryCode,
                                                                                             optionsCaption: 'Select a Brewery'"></select>

<select class="ui-select" id="LineSelect" name="LineSelect" data-bind="options: GetLines,
                                                                                             optionsText: 'Text',
                                                                                             optionsValue: 'Value',
                                                                                             value: lineCode,
                                                                                             optionsCaption: 'Select a Line'"></select>

我会这样做:

self.breweryCode.subscribe(function () {
    if (!!self.breweryCode()) {
        loadLines();
    } else {
        self.GetLines([]);
    }
});
如果
self.breweryCode()
是truthy,则将进行Ajax调用以加载行,否则该列表将完全清空


注:如果您愿意,您也可以使用do
self.GetLines.removeAll()

您在这里缺少else案例:

 self.breweryCode.subscribe(function () {
    if (self.breweryCode() != undefined) {
        loadLines();
    }
    else {
        self.GetLines([]);
    }
});

这就成功了@Vlad很接近,但[]是必需的。