我认为我有以下tbody
:
<tbody data-bind="foreach: ListingData">
<tr>
<!-- ko foreach: $parent.ColumnNames -->
<!-- ko if: $data.FieldName == 'Industry' -->
<td data-bind="event:{ dblclick: function(data, event){ $root.getData(data, event , $parentContext.$index())}}">
<span data-bind="text: $parent[$data.DisplayName]"></span>
</td>
<!-- /ko -->
<!-- /ko -->
</tr>
</tbody>
ListingData
是一个可观察的数组,包含行和列形式的数据。以下是我的getData
功能:
getData: function (data, event, index) {
(viewModel.ListinData()[index])["Industry"]='new value';
}
当用户双击Industry
td元素时,我必须修改可观察数组中Industry
列的值,如上面基于项目的getData
方法所示我可以使用$parentContext.index()
得到的索引。现在,当我通过使用Industry
JS调试器调用getData
函数来修改firebug
列值后检查td
列值时,会在可观察数组中修改该值,但不会反映更改在相应的pop()
的UI中。在这里,我必须修改一列而不是整行的一个值,因此我无法使用push()
和{{1}}方法。
当修改其列中的单个值时,如何使可观察数组更新UI?
答案 0 :(得分:0)
ObservableArray()
仅观察数组中的项目。它不会观察数组中每个项目的每个属性是否有变化。
因此,您需要将Industry
更改为observable()
,然后使用函数语法进行设置。
getData: function (data, event, index) {
(viewModel.ListingData()[index])["Industry"]('new value');
// or simply //
viewModel.ListingData()[index].Industry('new value');
}