背景

我有一个视图模型和两个模型。对于每种模型,我尝试将name属性绑定到dom。每个名称都有默认值,但是我希望用户能够编辑这些值。遵循淘汰赛文档后,我使用了hasFocus方法。我的问题是单击时可以编辑,但是单击时焦点不会改变,数组也不会更新。看来我的模型editable属性从未设置回false。请参阅下面的相应HTML和JS。

那我在做什么错?这是我正在使用的检查表(无济于事)...


确保名称是可观察的。
确保editing是可观察的。
确保我的edit函数将editing设置为true
确保editing默认为false
确保<input>具有value绑定。
确保<i>具有text绑定。
确保事件处理程序绑定到editing的值



  JSBin:http://jsbin.com/fehoq/117/edit


JS

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());
    };
    ...
}


的HTML

<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">&nbsp;</i>
        </td>
...

最佳答案

您可能希望将hasFocus绑定到可观察对象本身,以便可以将假值写回它。因此,您需要:

hasFocus: editing而不是hasFocus: editing()

在后者中,绑定仅接收该值,而无法返回到可观察的值以对其进行写入。

关于javascript - knockout JS:“hasFocus”始终具有焦点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23418229/

10-12 06:47