0

我无法从从服务器加载的对象数组中更新列。

我有这样的东西:

self.tenants = ko.observableArray([{"Id":1,"Name":"Tenant 1","IsActive":true}]);
self.selectedTenant = ko.observable(null);

用户界面:

<tbody data-bind="foreach: tenants">
  <tr data-bind="css: { 'active-row': $root.selectedTenant() === $data }">
    <td><a href="#" data-bind="click: $root.select">Select</a></td>
    <td data-bind="text: Name"></td>
    <td data-bind="text: Count"></td>
    <td></td>
    <td></td>
    <td data-bind="text: IsActive"></td>
  </tr>
</tbody>

现在我试图确保当我设置为IsActive时UI 显示它false

我知道理想情况下 IsActive 是可观察的,但由于我直接从服务器获取数组,我不确定我会如何做到这一点。

其次,我以某种方式试图淘汰以重新评估阵列。

我尝试了几种替代方法,其中一种如下所示:

var selected = self.selectedTenant();
selected.IsActive = true;
var idx = self.tenants.indexOf(selected);
//self.tenants.remove(selected);
var newArray = self.tenants().splice(idx, 1, selected);
self.tenants(newArray);
//self.tenants.valueHasMutated();

但这一切似乎都是徒劳的,该列始终显示原始值。我哪里错了,或者我该怎么办?

4

1 回答 1

1

您需要手动或使用 Ko 映射插件将服务器数据映射到使用 observables 的 TenantViewModels

如果您手动执行此操作,则可以使用 ko.utils.arrayMap 函数将数组中的每个元素从服务器映射到具有 TenantViewModels 的新数组

于 2013-01-21T11:51:43.487 回答