gpt4 book ai didi

javascript - 为什么不更新这个可观察到的 knockout ?

转载 作者:行者123 更新时间:2023-11-29 21:02:36 24 4
gpt4 key购买 nike

我期待用户界面显示“再见”。相反,它显示“你好吗?”。为什么会这样?在 knockout 中,处理单个订阅是否会完全阻止 observable 工作?

这是一个傻瓜:https://plnkr.co/edit/V5g5aQ5wxPGaRL31pUKj

这是我的代码:

<!DOCTYPE html>
<html>

<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
</head>

<body>
<p>
message: <span data-bind="text: message"></span>
</p>
<p>
messageChanged: <span data-bind="text: messageChanged"></span>
</p>
</body>

<script>
var viewModel = {
message: ko.observable('Hello'),
messageChanged: ko.observable(0)
};

var dispose = viewModel.message.subscribe(function _subscribe(newValue) {
viewModel.messageChanged(viewModel.messageChanged() + 1);
});

ko.applyBindings(viewModel);

viewModel.message('How are you?');

dispose();

viewModel.message('Good-bye');

</script>
</html>

我希望这是有效的代码。文档是这样说的:

最佳答案

我处理不当。我应该调用 subscribe 结果的 dispose 属性,而不是调用 subscribe 的结果。

这是 the documentation :

You can also terminate a subscription if you wish: first capture the return value as a variable, then you can call its dispose function, e.g.:

var subscription = myViewModel.personName.subscribe(function(newValue) { /* do stuff */ });
// ...then later...
subscription.dispose(); // I no longer want notifications

这是一个更正的 plunker: https://plnkr.co/edit/hsdESPX1F0k09lH4hThl

修改后的代码:

<!DOCTYPE html>
<html>

<head>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
</head>

<body>
<p>
message: <span data-bind="text: message"></span>
</p>
<p>
messageChanged: <span data-bind="text: messageChanged"></span>
</p>
</body>

<script>
var viewModel = {
message: ko.observable('Hello'),
messageChanged: ko.observable(0)
};

var subscription = viewModel.message.subscribe(function _subscribe(newValue) {
viewModel.messageChanged(viewModel.messageChanged() + 1);
});

ko.applyBindings(viewModel);

viewModel.message('How are you?');

subscription.dispose();

viewModel.message('Good-bye');

</script>
</html>

关于javascript - 为什么不更新这个可观察到的 knockout ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762477/

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