javascript - Knockout JS:函数调用两次
问题描述
我添加了一个文本框,我想在每个keyup
应该调用的函数上都这样做。
这是我的 html 代码:
<input type="text" id="description" class="form-control" maxlength="255" data-bind="event:{keyup: doSomething},value: property1,valueUpdate:'afterkeyup'"></input>
这是我的淘汰赛 js 代码:
define(['uiComponent','ko'], function(Component,ko) {
return Component.extend({
defaults:{
property1: ko.observable(),
tracks: {
property1: true
}
},
initialize: function () {
this._super();
},
getText: function () {
return "call the function here..";
},
doSomething : function(){
this.property1.subscribe(function(newValue){
console.log(newValue);
console.log("inside subscribe");
});
}
});
});
例如:当我按下T然后它会调用一次。之后,我按Ethen 它将调用两次而不是一次。
我想在每个keyup
我想获得文本框值的时候都这样做。
怎么做?
解决方案
有两种方式绑定和订阅事件是一种“反模式” 。
在initialzie
中,为您的 observable 创建一次订阅:
initialize: function() {
/* ... */
this.property1.subscribe(function(newValue) { /* ... */ });
}
如果您计划稍后删除该组件,您可以存储订阅并在删除时将其丢弃。(类似于您目前在每个活动中所做的事情。)
现在,无论何时keyup
发生,敲除都会value
从输入中读取 ,将其写入property1
,然后调用订阅的函数。
推荐阅读
- css - CSS 关键帧在 Code Loader 上工作,但不在 Fiddle 或我的页面上
- amazon-web-services - 具有业务逻辑的 AWS Appsync + DynamoDB
- python - 如何在 Python 3.7 中打开图像?
- python - 烧瓶与 Ajax
- database - 当同一行中的 2 列等于 2 个值时,SQL 搜索行
- java - 无法使用 Selenium java 库获取 cookie
- javascript - 地图功能错误:无法读取 Reactjs 中未定义的属性“地图”
- c# - c#如何确定是否在不同的键盘设置中按下了键
- c# - 将 reader.GetGuid(0) 与 Postgres 一起使用时出现奇怪的错误
- c++ - glm 旋转和平移