我想渲染一个包含我的服务器发送给我的对象列表的表。我现在正在这样做:
<table>
<thead>
<tr>
<th>id</th>
<th>Name</th>
<th>Status</th>
</tr>
</thead>
<tbody data-bind="foreach: services">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: name"></td>
<td data-bind="text: status"></td>
</tr>
</tbody>
</table>
和Knockout.js绑定部分:
var mappedData = komapping.fromJSON('{{{ services }}}');
ko.applyBindings({services: mappedData});
services
是一个包含JSON数据的变量,整个页面都是用把手渲染的。 到目前为止一直很好。我能够呈现表格中收到的数据。
现在问题:我想收到一条通知,告诉我服务的状态已经改变,并更新mappedData中的相应对象。 问题是mappedData看起来非常不透明,我无法检索对象并根据其id 更新它。
帮助表示赞赏!
答案 0 :(得分:0)
要获取对象,可以编写一个帮助函数,为您检索服务对象。你可以这样做(假设mappedData是一个observableArray和id observable):
function get_service_by_id(service_id){
for(var i=0;i<mappedData().length;i++){
if (mappedData()[i].id() === service_id){
return mappedData()[i];
}
}
return false;
}
答案 1 :(得分:0)
此时您的mappedData
变量将是一个淘汰数组,其中包含一组包含敲除可观察数据的对象。
所以你要做的就是从数组中改变正确对象中的observable状态。
function updateServiceStatus(id, status) {
var service = mappedData().filter(function(e) { return e.id() == id; });
if (service.length) {
service[0].status(status);
}
}