gpt4 book ai didi

javascript - 如何更改订阅函数内部可观察值的值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:35:49 26 4
gpt4 key购买 nike

如何更改订阅函数内部的可观察值?例如

JS 模型:

function Model(){
self = this;
self.Test = ko.observable(2);
self.Test.subscribe(function (){
if (/**Some bool expression**/) {
self.Test(2);
}
});
}

HTML:

<input type="radio" value="1" data-bind="checked:Test" />
<input type="radio" value="2" data-bind="checked:Test" />
<input type="radio" value="3" data-bind="checked:Test" />

默认选中第二个 radio 输入。在我点击第一个 radio 后,第一个和第二个都被选中。

enter image description here

更新:当我同时包含 jQuery 和 knockout 时,就会发生这种情况。如果删除 jquery 则一切正常。但它只是测试页。在实际项目中我需要在某些地方使用jQuery,在这种情况下我不能删除它。

Sample .测试页来源:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="knockout-2.1.0.js"></script>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
function Model(){
self = this;
self.Test = ko.observable(2);
self.Test.subscribe(function (){
if (true) {
self.Test(2);
}
});
}
</script>
</head>
<body>
<input type="radio" value="1" data-bind="checked:Test" />
<input type="radio" value="2" data-bind="checked:Test" />
<input type="radio" value="3" data-bind="checked:Test" />
</body>
<script type='text/javascript'>
ko.applyBindings(new Model());
</script>
</html>

最佳答案

更新(2015 年 2 月 27 日):从 Knockout 3.1.0 开始,Knockout 不包含任何针对 click 事件的“解决方法”代码,处理问题。 http://jsfiddle.net/9S96U/3/


当包含 jQuery 时,Knockout 使用它来处理事件,包括用于响应单选按钮的 click 事件。它包含一些“解决方法”代码,以确保点击处理程序看到单选按钮的正确选中状态,但这似乎会干扰您尝试在中间重置选中值的代码。

解决方案是使用 setTimeout 更新值。这样它会在点击处理程序完成后发生。

function Model(){
var self = this;
self.Test = ko.observable(2);
self.Test.subscribe(function (){
setTimeout(function() {
self.Test(2);
});
});
}

示例:http://jsfiddle.net/9S96U/1/

您还需要在 self = this 之前包含 var,这样您就不会覆盖 window.self

关于javascript - 如何更改订阅函数内部可观察值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13056146/

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