gpt4 book ai didi

knockout.js - 复选框不会在 Knockout 中使用数据绑定(bind)保持选中状态

转载 作者:行者123 更新时间:2023-12-04 02:18:46 25 4
gpt4 key购买 nike

我有一个复选框,我想在单击它时执行一个功能。问题是,它需要根据复选框是否被选中来执行不同的功能。因此,我设置了一个默认设置为 false 的状态可观察对象:

self.status = ko.observable(false);

我在点击时将一个函数绑定(bind)到复选框:

<input type="checkbox" data-bind="click: modify, checked: status">

然后我创建了一个函数来根据可观察到的状态是真还是假来执行不同的函数:

self.modify = function() {
if (self.status() == false) {
// Some other code
alert('Now True!')
self.status(true);
}
else if (self.status() == true) {
// Some other code
alert('Now False!');
self.status(false)
}
}

这个函数工作得很好。它根据状态是真还是假来提醒正确的消息,但问题是,当状态为真时,我似乎无法让复选框保持选中状态。

http://jsfiddle.net/tsnolan23/s441hggL/

关于复选框未保持选中状态的任何想法?

最佳答案

这是发生了什么:

  1. 您点击复选框。
  2. 点击处理程序触发,它设置状态
  3. checked 处理程序触发,它更改复选框状态。
  4. 事件冒泡到浏览器,浏览器还原更改。
  5. Knockout 注意到这一点,并再次更新 status

这是一种完全不同的方法,为此目的使用可写计算:

var Vm = function() {
var self = this;
var _isActive = ko.observable(false);
self.isActive = ko.computed({
read: _isActive,
write: function(newValue) {
_isActive(newValue);
if (!!newValue) { alert("Something..."); }
else { alert("Another thing."); }
}
});
};

ko.applyBindings(new Vm());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<label>
<input type="checkbox" data-bind="checked: isActive" /> Check me!
</label>

如果出于某种原因您必须使用click 绑定(bind),那么您应该做两件事:

  • 从您的处理程序返回 true
  • 在绑定(bind)上设置clickBubble: false

例如:

var Vm = function() {
var self = this;

self.isActive = ko.observable(false);

self.modify = function() {
if (self.isActive() == false) {
// Some other code
alert('Now True!')
}
else if (self.isActive() == true) {
// Some other code
alert('Now False!');
}

return true;
}
};

ko.applyBindings(new Vm());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<label>
<input type="checkbox" data-bind="click: modify, clickBubble: false, checked: isActive" /> Check me!
</label>
<pre data-bind="text: ko.toJSON($root)"></pre>

关于knockout.js - 复选框不会在 Knockout 中使用数据绑定(bind)保持选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com