如何在敲除 JS 变量中分配未定义的值?
How assign undefined value in a knockout JS variable?
我有 2 个下拉列表和一个结果列表,它们使用计算的可观察函数进行绑定,如下所示:
self.Records = ko.computed(function() {
if (self.dropdown1 !== undefined) {
...
return Collection[0];
}
if (self.dropdown2() != undefined) {
...
return Collection[0];
}
});
但我的问题是,当我更改 dropdownlist2 的值时,我需要在 self.dropdown1 上设置未定义的值,因为我的记录集合可以更改。
我正在使用 jquery 更改第一个下拉列表的值,如下所示:
$('#reportTypeSelection').prop('selectedIndex', 0);
但是绑定不刷新。有什么建议吗
您可以添加更多代码来帮助我们了解您在做什么。我假设您想在更改 dropdown2 时更改 dropdown1 的值。如果我是对的,你可以使用更改事件来做到这一点。
var ViewModel = function() {
var self = this;
self.data = ko.observableArray(["Dog", "Cat", "Bird"]);
self.dropdown1 = ko.observable(undefined);
self.dropdown2 = ko.observable(undefined);
self.changeDropDownValue = function(index) {
if (index == 1)
self.dropdown2(undefined);
else
self.dropdown1(undefined);
}
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options:data, optionsCaption:'Select a pet...',value: $root.dropdown1, event:{change:$root.changeDropDownValue(1)}" ></select>
<select data-bind="options:data, optionsCaption:'Select a pet...',value: $root.dropdown2, event:{change:$root.changeDropDownValue(2)}" ></select>
我认为您不应该使用 jQuery 来编写该逻辑代码。这是一个示例,说明如何在视图模型中完成此操作,视图对逻辑一无所知。
var VM = function() {
var self = this;
self.items = ko.observableArray(["Item1", "Item2", "Item3"]);
self.dropdown1 = ko.observable();
self.dropdown2 = ko.observable();
self.dropdown1.subscribe(function(newValue) {
if (newValue) {
self.dropdown2(null);
}
});
self.dropdown2.subscribe(function(newValue) {
if (newValue) {
self.dropdown1(null);
}
});
}
ko.applyBindings(new VM());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options:items, optionsCaption:'Select first item',value: dropdown1"></select>
<select data-bind="options:items, optionsCaption:'Select second item',value: dropdown2"></select>
OP 问题是:"How to assign undefined value to a knockout JS variable?"。我在这里阅读的其他答案没有明确回答这个问题。
我认为在过去 someObservable(undefined)
会做与 someObservable()
完全相同的事情可能是真的,返回的是可观察值。然而,在最近的 Knockout 版本(在 3.4.2 上测试)中,该语法确实可以重置可观察值。
通过 运行 这个脚本亲眼看看。
let x = ko.observable();
console.log(x());
x(1);
console.log(x());
x(undefined);
console.log(x());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
我有 2 个下拉列表和一个结果列表,它们使用计算的可观察函数进行绑定,如下所示:
self.Records = ko.computed(function() {
if (self.dropdown1 !== undefined) {
...
return Collection[0];
}
if (self.dropdown2() != undefined) {
...
return Collection[0];
}
});
但我的问题是,当我更改 dropdownlist2 的值时,我需要在 self.dropdown1 上设置未定义的值,因为我的记录集合可以更改。
我正在使用 jquery 更改第一个下拉列表的值,如下所示:
$('#reportTypeSelection').prop('selectedIndex', 0);
但是绑定不刷新。有什么建议吗
您可以添加更多代码来帮助我们了解您在做什么。我假设您想在更改 dropdown2 时更改 dropdown1 的值。如果我是对的,你可以使用更改事件来做到这一点。
var ViewModel = function() {
var self = this;
self.data = ko.observableArray(["Dog", "Cat", "Bird"]);
self.dropdown1 = ko.observable(undefined);
self.dropdown2 = ko.observable(undefined);
self.changeDropDownValue = function(index) {
if (index == 1)
self.dropdown2(undefined);
else
self.dropdown1(undefined);
}
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options:data, optionsCaption:'Select a pet...',value: $root.dropdown1, event:{change:$root.changeDropDownValue(1)}" ></select>
<select data-bind="options:data, optionsCaption:'Select a pet...',value: $root.dropdown2, event:{change:$root.changeDropDownValue(2)}" ></select>
我认为您不应该使用 jQuery 来编写该逻辑代码。这是一个示例,说明如何在视图模型中完成此操作,视图对逻辑一无所知。
var VM = function() {
var self = this;
self.items = ko.observableArray(["Item1", "Item2", "Item3"]);
self.dropdown1 = ko.observable();
self.dropdown2 = ko.observable();
self.dropdown1.subscribe(function(newValue) {
if (newValue) {
self.dropdown2(null);
}
});
self.dropdown2.subscribe(function(newValue) {
if (newValue) {
self.dropdown1(null);
}
});
}
ko.applyBindings(new VM());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select data-bind="options:items, optionsCaption:'Select first item',value: dropdown1"></select>
<select data-bind="options:items, optionsCaption:'Select second item',value: dropdown2"></select>
OP 问题是:"How to assign undefined value to a knockout JS variable?"。我在这里阅读的其他答案没有明确回答这个问题。
我认为在过去 someObservable(undefined)
会做与 someObservable()
完全相同的事情可能是真的,返回的是可观察值。然而,在最近的 Knockout 版本(在 3.4.2 上测试)中,该语法确实可以重置可观察值。
通过 运行 这个脚本亲眼看看。
let x = ko.observable();
console.log(x());
x(1);
console.log(x());
x(undefined);
console.log(x());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>