Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 击倒JS:`hasFocus`总是有焦点 背景_Javascript_Html_Knockout.js_Ko.observablearray - Fatal编程技术网

Javascript 击倒JS:`hasFocus`总是有焦点 背景

Javascript 击倒JS:`hasFocus`总是有焦点 背景,javascript,html,knockout.js,ko.observablearray,Javascript,Html,Knockout.js,Ko.observablearray,我有一个单视图模型和两个模型。对于每个模型,我都试图将name属性绑定到dom。每个名称都有默认值,但我希望用户能够编辑这些值。在完成淘汰文档之后,我使用了该方法。我的问题是,在单击时,我可以进行编辑,但当我单击出时,焦点不会改变,并且我的数组也不会更新。看起来我的模型editable属性从未设置回false。请参见下面相应的HTML和JS 那么我做错了什么?这是我用来排除故障的清单(没有用) 确保名称是可见的 确保编辑是可见的 确保我的edit功能将editing设置为true 确保编辑默认为

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

那么我做错了什么?这是我用来排除故障的清单(没有用)

  • 确保名称是可见的
  • 确保
    编辑
    是可见的
  • 确保我的
    edit
    功能将
    editing
    设置为
    true
  • 确保
    编辑
    默认为
    false
  • 确保
    具有
    绑定
  • 确保
    具有
    文本
    绑定
  • 确保事件处理程序绑定到
    编辑
  • JSBin

    JS HTML
    
    ...
    
    您需要将
    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">&nbsp;</i>
            </td>  
    ...