首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在knockout JS变量中分配未定义的值?

如何在knockout JS变量中分配未定义的值?
EN

Stack Overflow用户
提问于 2016-06-11 01:49:32
回答 3查看 2.2K关注 0票数 0

我有两个下拉列表和一个带有绑定的结果列表,使用计算的可观察函数,如下所示:

代码语言:javascript
复制
     self.Records = ko.computed(function() {
                    if (self.dropdown1 !== undefined) {
 ...
                        return Collection[0];
                    }

                    if (self.dropdown2() != undefined) {
                     ...
                        return Collection[0];
                    }
                });

但我的问题是,当我改变dropdownlist2的值时,我需要在self.dropdown1上设置未定义的值,因为我的记录集合可能会改变。

我用jquery修改了第一个下拉菜单的值,如下所示:

代码语言:javascript
复制
  $('#reportTypeSelection').prop('selectedIndex', 0);

但是绑定并不刷新。有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-13 01:39:32

我认为您不应该使用jQuery来编写这种逻辑。下面是一个示例,说明在视图模型中如何在视图不了解任何逻辑的情况下执行此操作。

代码语言:javascript
复制
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());
代码语言:javascript
复制
<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>

票数 2
EN

Stack Overflow用户

发布于 2016-06-11 03:56:13

你可以写更多的代码来帮助我们理解你在做什么。我假设您想要在更改dropdown2时更改dropdown1的值。如果我是对的,您可以使用change event来完成此操作。

代码语言:javascript
复制
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);
代码语言:javascript
复制
<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>

票数 1
EN

Stack Overflow用户

发布于 2019-07-17 06:04:16

OP问题是:“如何为knockout JS变量分配未定义的值?”我在这里读到的其他答案并没有明确回答这个问题。

我认为在过去,someObservable(undefined)的作用可能与someObservable()完全相同,返回的是可观察到的值。然而,在最近的Knockout版本(在3.4.2上测试)中,该语法确实可以在可观察值上进行重置。

通过运行此脚本亲自查看。

代码语言:javascript
复制
let x = ko.observable();
console.log(x());
x(1);
console.log(x());
x(undefined);
console.log(x());
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37754391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档