繁体   English   中英

Knockout JS:`hasFocus`总是有焦点

[英]Knockout JS: `hasFocus` always has Focus

背景

我有一个单一的视图模型和两个模型。 对于每个模型,我试图将名称属性绑定到dom。 每个名称都有默认值,但我希望用户能够编辑这些值。 在Knockout文档之后,我使用了hasFocus方法。 我的问题是,点击后,我可以编辑,但当我点击时,焦点不会改变,我的阵列不会更新。 看起来我的模型editable属性永远不会被设置为false 请参阅下面的相应HTML和JS。

那么我做错了什么? 这是我使用(无济于事)故障排除的清单......

  1. 确保名称可观察。
  2. 确保editing是可观察的。
  3. 确保我的edit功能将editing设置为true
  4. 确保editing默认为false
  5. 确保<input>具有value绑定。
  6. 确保<i>具有text绑定。
  7. 确保该事件处理程序绑定到editing

JSBinhttp//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绑定到observable本身,以便可以将false值写回到它。 所以,你会想要:

hasFocus: editing而不是hasFocus: editing()

在后者中,绑定仅接收值,并且无法返回到observable以写入它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM