【发布时间】:2015-02-22 21:29:36
【问题描述】:
我正在使用 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>
在这里,当我尝试保存记录时,它会保存它,但也会返回错误:
错误:无法解析绑定。 消息:TypeError:对象不支持属性或方法“toFixed”; 绑定值:文本:MyNumber().toFixed(2)
我尝试更改编辑模板,使其使用: ko.utils.unwrapObservable(MyNumber()).toFixed(2) 要么 MyNumber().toFixed(2) 以匹配项目模板。这不会导致 Javascript 错误,但也不会更新值。
我看到帖子说这是因为“MyNumber”不是可观察的,所以我尝试了 unwrapObservable()。除此之外,我不确定我应该去哪里找出问题所在。
【问题讨论】:
-
您的问题听起来很熟悉,但这个问题不允许我们重现它。请包含更多(但最少)代码来重现它,最好添加一个堆栈片段(在编辑器工具栏上)。
-
您能否验证
MyNumber的所有值实际上是一个数字(而不是空值、字符串、对象、数组等)? -
尽量避免在视图中执行操作。为了更好的可维护性,请使用计算或绑定处理程序。