KnockoutJS Object doesn't support 'toFixed'
KnockoutJS Object doesn't support 'toFixed'
我正在使用 KnockoutJS,遇到了一个我不知道如何找到解决方案的问题:
我有一个包含记录的表:
<script type="text/html" id="myItemsTemplate">
<tr>
<td data-bind="text: MyNumber().toFixed(2)"></td>
<td>
<button class="btn" data-bind="click: $root.editItem">Edit</button></td>
<td>
<button class="btn btn-primary" data-bind="click: $root.enterHours">Enter Hours</button></td>
</tr>
最初"MyNumber().toFixed(2)"只是"MyNumber",但我遇到了一个问题,"MyNumber"不会显示小数位,或者根据值显示超过 2 位小数(如果值是"7.00",它将只显示"7",如果是"7.345345",它将显示完整的"7.345345")。 所以我把它改成了"MyNumber().toFixed(2)"。
这似乎修复了显示,但是现在似乎破坏了更新部分:
<script type="text/html" id="myEditTemplate">
<tr>
<td>
<input data-bind="value: MyNumber" class="table-edit" /></td>
<td>
<button class="btn btn-success" data-bind="click: $root.acceptItemEdit">Save</button></td>
<td>
<button class="btn btn-warning" data-bind="click: $root.cancelItemEdit">Cancel</button></td>
</tr>
</script>
在这里,当我尝试保存记录时,它将保存它,但也会返回错误:
错误:无法分析绑定。消息:类型错误:对象不支持属性或方法"toFixed";绑定值:文本:MyNumber().toFixed(2)
我尝试更改编辑模板,以便它使用:ko.utils.unwrapObservable(MyNumber()).toFixed(2)或MyNumber().toFixed(2) 以匹配项模板。 这不会导致Javascript错误,但也不会更新值。
我看到一些帖子说这是因为"MyNumber"不是一个可观察的,所以我尝试了unwrapObservable()。 除此之外,我不确定我应该在哪里寻找找出问题所在。
按照您的问题描述,我在这里复制了一个测试用例:http://jsfiddle.net/w2nae2dq/。@icktoofay一部分是正确的:最好使用计算的可观察量(但本身不是必需的)。如果需要显示要编辑的 2 个十进制值,则需要可写计算可观察值。但是,如果您只想显示 2 个十进制数并使 MyNumber
值可编辑,请检查小提琴以进行演示。
无论如何,代码的问题在于类型转换。实际上,当您第一次设置MyNumber
的值时,它是一个数字。但是,当用户在<input>
中输入新值(从而更新MyNumber
)时,此值将设置为字符串值,这使得text:
绑定无法对其执行toFixed
方法。因此,计算出的可观察量如下所示:
self.MyNumberRounded = ko.computed(function() {
return parseFloat(self.MyNumber()).toFixed(2); // note parseFloat
}, self);
这就是为什么Object doesn't support property
:)
使用过 KnockoutJS,但从他们的文档中,看起来你需要创建一个计算的可观察量:
this.formattedMyNumber = ko.computed(function() {
return this.MyNumber().toFixed(2);
}, this);
然后绑定到它:
<td data-bind="text: formattedMyNumber"></td>
如果还想在编辑视图中使用格式化版本,则可能需要使用可写计算可观察量。
- toFixed and replace dons'这似乎奏效了
- 在Javascript中,对于货币来说,是toFixed()足够精确
- toFixed javascript函数给出奇怪的结果
- jQuery - 动态表计算在添加 .toFixed(1) 时中断
- 什么是JS的确切等价物:PHP中的something.toFixed()
- 对负指数调用的.toFixed()返回一个数字,而不是字符串
- GeckoFX with CORS support
- 正在寻求将.toFixed添加到jquery的帮助
- deployJava.js does not support IE11
- Performance: toFixed() vs. Math.floor(x * 10000)
- iOS5 Doesn't Support bind()!
- GWT Code Generation, MVC & Support
- !$.support.opacity -- 服务器上的行为与本地主机不同
- 使用 toFixed 对十进制数字进行舍入
- Decimal javascript-toFixed
- webdriverio does not support elementToBeClickable
- Wy js 方法 toFixed() 返回 NaN
- 如何防止 toFixed 四舍五入十进制数字
- toFixed(2) 对 “x.525” 的舍入不一致
- KnockoutJS Object doesn't support 'toFixed'