gpt4 book ai didi

javascript - 如何让knockoutJS实时响应属性变化?

转载 作者:行者123 更新时间:2023-11-29 10:12:39 24 4
gpt4 key购买 nike

下面的代码应该执行以下操作:

  1. 当我输入一个新名字时,它会在 span 中显示“Welcome: xxx”。
  2. 当我删除文本框中的所有字符时,span 中将不会显示任何内容。

问题是,当我删除一个词时(假设文本框的默认值是“Bill Gates”),并且我删除了“Gates”,我希望 span 实时显示“Bill”,而不是在我离开时字段。

那么如何使 KnockoutJS 支持“实时”属性更改?我希望看到跨度在我键入时发生变化,而不是在离开文本框或按“Enter”键时发生变化。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Knock Out Sample</title>
</head>
<body>
Your Name, please: <input type="text" data-bind="value: myName" />
<br />
<span data-bind="text: myNameShown, visible: showWelcome" id="spName"></span>
</body>

<script src="KnockOutJS.js" type="text/javascript"></script>

<script type="text/javascript">
var model = {
myName: ko.observable("Bill Gates")
};

model.myNameShown = ko.dependentObservable(function () {
return "Welcome: " + model.myName();
}, model);

model.showWelcome = ko.dependentObservable(function () {
return model.myName() && model.myName().trim() != "";
}, model);

ko.applyBindings(model);
</script>
</html>

最佳答案

The answer by @Luis结合使用 valueUpdate: 'afterkeydown'value 绑定(bind)效果很好,但如果您使用 Knockout 3.2 或更高版本,则有一个首选的替代答案:使用 the textInput binding .此绑定(bind)更简洁,并处理跨浏览器的怪癖。像这样使用它:

ko.applyBindings({myName: ko.observable('initial value')});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

Input: <input type="text" data-bind="textInput: myName" />
<hr />
Result: <strong data-bind="text: myName"></strong>

引用上述关于 textInputvalue 之间区别的文档:

Although the value binding can also perform two-way binding between text boxes and viewmodel properties, you should prefer textInput whenever you want immediate live updates. The main differences are:

  • Immediate updates [...]
  • Browser event quirks handling [...]

关于javascript - 如何让knockoutJS实时响应属性变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30339875/

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