0

サーバーからロードされたオブジェクトの配列から更新された列を取得できません。

私はこのようなものを持っています:

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

UI:

<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 が監視可能であることはわかっていますが、配列をサーバーから直接取得するため、どうすればよいかわかりません。

第二に、私はどういうわけか配列を再評価するためにノックアウトしようとしています。

いくつかの代替案を試しましたが、そのうちの 1 つが次のようになります。

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 マッピング プラグインを使用して、監視対象を使用する TenantViewModels にサーバー データをマップする必要があります。

手動で行っている場合は、ko.utils.arrayMap 関数を使用して、配列内の各要素をサーバーから TenantViewModels を使用して新しい配列にマップできます。

于 2013-01-21T11:51:43.487 に答える