如何在敲除时在 foreach 循环中绑定输入值

Posted

技术标签:

【中文标题】如何在敲除时在 foreach 循环中绑定输入值【英文标题】:How to bind input values in a foreach loop on knockout 【发布时间】:2021-08-03 04:37:44 【问题描述】:

我设置了一个 foreach 循环来遍历对象列表并将它们显示为页面上的输入字段,但在更新输入时无法获取要保存到对象的值。在我的 javascript 中:

$(function (carService, $) 
  var viewModel = function () 
    self = this;
    self.Vehicles = ko.observableArray();

    var vehicle = new Object();
    vehicle.VehicleMake = ko.observable("test make");
    vehicle.VehicleModel = ko.observable("test model");
    self.Vehicles.push(vehicle);
  
  app.carService.viewModel = new viewModel();
  ko.mapping.fromJSON(settings.modelJson, , app.carService.viewModel);
);

我对 foreach 数据绑定循环中的值进行了数据绑定:

<div data-bind="with:app.carService.viewModel">
  <div data-bind="foreach: Vehicles">
      <input type="text" data-bind="value: VehicleMake, valueUpdate: 'afterkeydown'"/>
      <input type="text" data-bind="value: VehicleModel, valueUpdate: 'afterkeydown'"/>
  </div>
</div>

来自 javascript 对象(“t​​est make”和“test model”)的数据显示在输入字段中,但是当这些输入发生更改时,数据不会像通常使用数据绑定一样反映回对象。

有什么想法我在这里做错了吗?

【问题讨论】:

原始值从何而来?如果这些值来自数据库,则在页面上放置 lsitview、repeater 甚至是 gridview - 填充它(大约需要 4 行代码),现在您的数据会呈现在页面上 - 并且这些控件会持久保存数据为您服务,包括允许用户更改/编辑值。然后,您可以循环该中继器控件并将编辑结果发送回数据库。使用服务器端控件将使您的工作在标记方面减少 5 倍 - 以及您必须编写以解决此问题的代码。 【参考方案1】:

试试改成TextInput,淘汰推荐TextInput两个 绑定值绑定,

还要确保您绑定到 observable 而不是 输入元素的值

【讨论】:

以上是关于如何在敲除时在 foreach 循环中绑定输入值的主要内容,如果未能解决你的问题,请参考以下文章

如何将敲除数据绑定到没有名称的数组[重复]

带有按钮的表格上的敲除映射和 foreach 数据绑定,缺少对视图模型的引用?

如何使用敲除绑定访问文件输入?

使用敲除的键盘导航

敲除绑定文本框以选择文本

解决不一致的敲除检查绑定