如何创建一个observables



我有一系列对象,我为其显示它们的属性。如何向其添加单独的编辑功能?可以说是列表元素的每个元素的编辑按钮。

我想在对象处于编辑模式时显示输入字段,而不是文本字段,为此,我正在使用可见的绑定。所以我需要每个人都可以观察到一个布尔。

我如何在不知道列表中的元素数量的情况下执行此操作...我也有添加和删除,因此每次创建新元素时,我都需要在此数组中添加更多可观察力。

我还试图给我的对象提供一个ko.observable元素。

我喜欢在observableArray内使用对象。这是根据需要的许多行的内联编辑功能的示例。

function Employee(emp) {
  var self = this;
  self.Name = ko.observable(emp.Name);
  self.Age = ko.observable(emp.Age);
  self.Salary = ko.observable(emp.Salary);
  self.EditMode = ko.observable(emp.EditMode);
  self.ChangeMode = function() {
    self.EditMode(!self.EditMode());
  }
}
function viewModel() {
  var self = this;
  self.Employees = ko.observableArray()
  self.Employees.push(new Employee({
    Name: "Joe",
    Age: 20,
    Salary: 100,
    EditMode: false
  }));
  self.Employees.push(new Employee({
    Name: "Steve",
    Age: 22,
    Salary: 121,
    EditMode: false
  }));
  self.Employees.push(new Employee({
    Name: "Tom",
    Age: 24,
    Salary: 110,
    EditMode: false
  }));
}
var VM = new viewModel();
ko.applyBindings(VM);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<table border=1>
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>Salary</th>
      <th></th>
    </tr>
  </thead>
  <tbody data-bind="foreach: Employees">
    <tr data-bind="if: !EditMode()">
      <td data-bind="text: Name"></td>
      <td data-bind="text: Age"></td>
      <td data-bind="text: Salary"></td>
      <td><button data-bind="click: ChangeMode">Edit</button></td>
    </tr>
    <tr data-bind="if: EditMode()">
      <td>
        <input data-bind="value: Name">
      </td>
      <td>
        <input data-bind="value: Age">
      </td>
      <td>
        <input data-bind="value: Salary">
      </td>
      <td><button data-bind="click:ChangeMode">Save</button></td>
    </tr>
  </tbody>
</table>

最新更新