Javascript 编辑功能在淘汰版js中不起作用

Javascript 编辑功能在淘汰版js中不起作用,javascript,knockout.js,Javascript,Knockout.js,我刚刚用网络上的一个示例创建了一个可编辑的网格。在这个示例中,当我试图编辑网格时,它不会显示值,它会将输入字段显示为空白。有人能帮忙吗? 在edit中,我调用这个函数 self.editFruit = function (fruit) { if (self.editingItem() == null) { // start the transaction fruit.beginEdit(self.editTransaction)

我刚刚用网络上的一个示例创建了一个可编辑的网格。在这个示例中,当我试图编辑网格时,它不会显示值,它会将输入字段显示为空白。有人能帮忙吗? 在edit中,我调用这个函数

  self.editFruit = function (fruit) {
        if (self.editingItem() == null) {
            // start the transaction
            fruit.beginEdit(self.editTransaction);

            // shows the edit fields
            self.editingItem(fruit);
        }
    };

这里是fiddle

在第一次评估绑定时,每个水果的可观察对象(
data bind=“value:name.editValue”
)的editValue子可观察对象不存在。当你点击“编辑”链接时,editValue observable被创建,但是knockout不知道它必须重新绑定

你可以用两种方法来解决这个问题

一,。围绕每个输入创建虚拟
if
绑定。当if变为true时,内容将重新插入到DOM中,导致绑定重新计算。在设置editingItem observable之前,请确保editValue observable已附加到其父级,否则您将处于相同的情况

<!-- ko if: $root.isItemEditing($data) -->
<input data-bind="..."></input>
<!-- /ko -->
function Fruit(data) {
  var self = this;
  self.name = ko.observable(data.name || "");
  self.name.editValue = ko.observable();

  self.rate = ko.observable(data.rate || "");
  self.rate.editValue = ko.observable();
}

ko.observable.fn.beginEdit = function (transaction) {
  ...

  if (self.slice)
    self.editValue(self.slice());
  else
    self.editValue(self());

  ...
}