Javascript 击倒JS:`hasFocus`总是有焦点 背景
我有一个单视图模型和两个模型。对于每个模型,我都试图将name属性绑定到dom。每个名称都有默认值,但我希望用户能够编辑这些值。在完成淘汰文档之后,我使用了该方法。我的问题是,在单击时,我可以进行编辑,但当我单击出时,焦点不会改变,并且我的数组也不会更新。看起来我的模型Javascript 击倒JS:`hasFocus`总是有焦点 背景,javascript,html,knockout.js,ko.observablearray,Javascript,Html,Knockout.js,Ko.observablearray,我有一个单视图模型和两个模型。对于每个模型,我都试图将name属性绑定到dom。每个名称都有默认值,但我希望用户能够编辑这些值。在完成淘汰文档之后,我使用了该方法。我的问题是,在单击时,我可以进行编辑,但当我单击出时,焦点不会改变,并且我的数组也不会更新。看起来我的模型editable属性从未设置回false。请参见下面相应的HTML和JS 那么我做错了什么?这是我用来排除故障的清单(没有用) 确保名称是可见的 确保编辑是可见的 确保我的edit功能将editing设置为true 确保编辑默认为
editable
属性从未设置回false
。请参见下面相应的HTML和JS
那么我做错了什么?这是我用来排除故障的清单(没有用)
编辑
是可见的edit
功能将editing
设置为true
编辑
默认为false
具有值
绑定
具有文本
绑定编辑
...
您需要将hasFocus
与可观察对象本身绑定,以便将假值写回它。因此,您希望:
hasFocus:editing
而不是hasFocus:editing()
在后一种情况下,绑定只接收值,无法返回到可观察对象来写入它。我明白了。这从技术上解决了我的问题。不幸的是,虽然我现在可以失去焦点,但我的数组仍然没有更新新值。对此有什么想法吗?这基本上是同一类型的问题。对于
值
,您需要直接绑定全名
,以便可以对其进行写入。如果您确实需要索引作为输入框中的值的一部分(而不是在输入框之外的元素中),那么您可以使用可写的计算。如果你在这方面需要帮助,请告诉我。把索引放在别处对我很有用。改天我必须学习可写计算机;)
function StudentModel(fullName) {
var _this = this;
this.fullName = ko.observable(fullName);
this.editing = ko.observable(false);
this.edit = function() {
_this.editing(true);
console.log(_this.editing());
};
...
}
<tbody>
<!-- ko foreach: students -->
<tr>
<td>
<input data-bind="value: fullName() + ' ' + ($index() + 1), visible: editing(), hasFocus: editing()"/>
<i data-bind="visible: !editing(), text: fullName() + ' ' + ($index() + 1), click: edit"> </i>
</td>
...