Knockout JS:`hasFocus`总是有焦点

时间:2014-05-01 23:10:41

标签: javascript html knockout.js ko.observablearray

背景

我有一个单一的视图模型和两个模型。对于每个模型,我试图将名称属性绑定到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
  8. 的值
      

    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>  
    ...
    

1 个答案:

答案 0 :(得分:2)

您可能希望将hasFocus绑定到observable本身,以便可以将false值写回到它。所以,你想要:

hasFocus: editing而不是hasFocus: editing()

在后者中,绑定只接收值,无法返回observable来写入它。