Html 敲除中的复选框和输入字段相关性

Html 敲除中的复选框和输入字段相关性,html,knockout.js,Html,Knockout.js,说明: 我有两件事,一个复选框和输入字段。这是我想要的。在我的viewmodel中,我有两个观测值,一个保存复选框check/uncheck(true或false),另一个保存输入字段值。这两个值都来自数据库,但我在这里将它们作为静态值来简化。因此,当页面加载时,如果复选框值为true,则应启用输入字段并显示该值。复选框也应显示为选中。如果取消勾选该复选框,则输入字段值应为零,并且输入字段应被禁用。如果在取消选中后选中复选框,则输入字段值仍应为零 小提琴: data-bind="checked

说明:

我有两件事,一个复选框和输入字段。这是我想要的。在我的viewmodel中,我有两个观测值,一个保存复选框check/uncheck(true或false),另一个保存输入字段值。这两个值都来自数据库,但我在这里将它们作为静态值来简化。因此,当页面加载时,如果复选框值为true,则应启用输入字段并显示该值。复选框也应显示为选中。如果取消勾选该复选框,则输入字段值应为零,并且输入字段应被禁用。如果在取消选中后选中复选框,则输入字段值仍应为零

小提琴:

 data-bind="checked: boxChecked" type="checkbox" ></input>
     <br/>
  Result:
  <input data-bind="enable: boxChecked() == true,
                         value: boxCheked() = true ? result : result = 0" type="text"></input>
data bind=“checked:boxChecked”type=“checkbox”>

结果:

我摆弄小提琴已经有一段时间了,但还是弄不懂


我会感谢你们的帮助

我会将逻辑从视图(HTML)中取出,并将其放入ViewModel中

Html:


订阅需要设置
结果
,html绑定变得更简单。下面是

我将从视图(HTML)中取出逻辑并将其放入ViewModel中

Html:


订阅需要设置
结果
,html绑定变得更简单。以下是

在页面加载时取消选中复选框时,是否有办法将值设为零?为什么我不能在眼前做呢?我的意思是,它不会工作吗?是的,您可以在viewmodel构造函数中强制执行它。此外,您可以将任何东西放在任何您想要的地方(只要它能工作),但通常建议将knockout与MVVM模式一起使用,并且(通常)会产生更多可重用的代码。业务逻辑,如根据视图中的某些条件将viewmodel属性设置为特定值,与MVVM模式背道而驰,因为业务逻辑属于viewmodel。只有与如何显示信息相关的逻辑才会出现在视图中。但一如既往,例外情况依然存在,请使用您的判断,等等。谢谢。我实际上实现了您的解决方案,并且无论值是真是假,我都会选中复选框。我不知道如何解决这个问题。我确信这与您的解决方案无关,因为您的示例运行良好。顺便问一下,newValue在哪里初始化?
newValue
只是订阅函数的参数名。敲除将函数的“已观察”下标值作为第一个参数传递给函数;你可以给它命名任何你想命名的东西。当页面加载时取消选中复选框时,有没有办法使值为零?为什么我不能在眼前做呢?我的意思是,它不会工作吗?是的,您可以在viewmodel构造函数中强制执行它。此外,您可以将任何东西放在任何您想要的地方(只要它能工作),但通常建议将knockout与MVVM模式一起使用,并且(通常)会产生更多可重用的代码。业务逻辑,如根据视图中的某些条件将viewmodel属性设置为特定值,与MVVM模式背道而驰,因为业务逻辑属于viewmodel。只有与如何显示信息相关的逻辑才会出现在视图中。但一如既往,例外情况依然存在,请使用您的判断,等等。谢谢。我实际上实现了您的解决方案,并且无论值是真是假,我都会选中复选框。我不知道如何解决这个问题。我确信这与您的解决方案无关,因为您的示例运行良好。顺便问一下,newValue在哪里初始化?
newValue
只是订阅函数的参数名。敲除将函数的“已观察”下标值作为第一个参数传递给函数;你可以随便给它取名字。
<input data-bind="checked: boxChecked" type="checkbox" ></input>
<br/>
Result:
<input data-bind="enable: boxChecked, value: result" type="text"></input>
var ViewModel = function() {
    var self = this;
    self.boxChecked = ko.observable(true);
    self.result = ko.observable('10');

    self.boxChecked.subscribe(function(newValue) {
        if (!newValue)
            self.result("0");
    });
};