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