为什么挖空不会更新我的文本框中的值
Why won't knockout update the value in my textbox?
(这是我遇到的一个非常简化的问题的例子。它可能没有太多的功能意义(
我需要一个可以键入货币的文本框,它将转换为视图模型上的 int 和文本框中格式良好的值
我从中获取了代码
示例 4:筛选和验证用户输入
并扔掉了lastInputWasValid和NaN测试。
我的结果在这里:http://jsfiddle.net/cvv341ro/8
如果我键入 1234,则acceptedNumericValue
的值将为 1234,文本框中的值将为 €1234。好!
如果我键入 €567.0,则acceptedNumericValue
的值将为 567,文本框中的值将为 €567。明!
但是,如果我然后键入 567.0000(与接受的值相同(,则 KNOCKOUT 将写入一个已经存在的值acceptedNumericValue
,而不会更新文本框。
我明白这个:)所以我会给淘汰赛一脚,并在acceptedNumericValue
上打电话给valueHasMutated
让它发挥作用
可以看到正在调用的计算值,但无论我做什么,文本框都不会将文本更改为 €567。
为什么!? :'(
非常简短的回顾:运行 jsfiddle ->将文本更改为 123.0 ->模糊 ->为什么文本框不会更新为 123 欧元?
此行为是设计使然,您必须在计算中使用 notify
扩展器,以触发重新计算,即使值没有更改 (123.0 == 123(:
this.attemptedValue = ko.pureComputed({
read: function() {
return "€" + this.acceptedNumericValue();
},
write: function (value) {
value = parseInt(value.replace("€", ""));
this.acceptedNumericValue(value);
this.acceptedNumericValue.valueHasMutated();
},
owner: this
}).extend({notify: 'always'});
演示 JSFiddle。
从文档中:
当计算的可观察量返回基元值(数字、字符串、布尔值或 null(时,通常只有在值实际更改时才会通知可观察量的依赖项。但是,可以使用内置的
notify
扩展器来确保计算可观察量的订阅者始终在更新时收到通知,即使值相同也是如此。
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 在我的网站上以纯文本形式添加最新推文
- 为什么我的文本框没有用查询结果更新
- 可以't使我的文本值在查询中起作用
- 无法使我的文本参数与我的查询一起工作
- 有人能发现我的错误吗(自动完成文本框)
- 我的剧本赢了'不能在IE中工作(甚至9)?修改复制文本的简单javascript
- 为什么我的导航按钮或按钮文本不会移动到中心
- 文本长度限制在我的 instafeed 模板中不起作用
- Angularjs:如何捕获
标签中的文本并在我的控制器中使用它 - 我的文本区域没有正确记录输出
- 我想限制用户在jquery中输入文本后面的空格,如果它在文本后面,我会删除空格
- 如何将图像放入我的滚动文本js中
- 与我的jquery弹出窗口和自动调整文本区域大小有冲突
- 水平滚动Marquee,当函数被调用时,我的文本坚持聚集在一起
- 我的价值赢得't文本居中对齐
- Shopify-更改我的selectorOption产品下拉变体的文本
- 如何设置元素的占位符文本 我无法编辑 HTML 并且 ID 正在更改
- 我正在尝试将javascript文本框的输入保存回服务器.我想从保存的弹出文本框中获得输入,以重命名文件夹
- Three.js-如何使我的文本精灵更清晰