我是淘汰赛的新手,我似乎无法在其他地方发现或记录此问题,但我怀疑我可能会遗漏某些东西。
我的淘汰模板HTML中有一个foreach
:
...
<tbody data-bind="foreach: cfeeds">
<tr class="datarow" data-bind="css:{danger:discovered()==false}">
<td><a title="View this feed" data-bind="text: name,attr: {href: view_url}"></a></td>
<td data-bind="text: description, css:{'text-danger':discovered()==false}"></td>
<td class="text-center" data-bind="text: sched_type"></td>
<td class="text-center" data-bind="text: sched_data"></td>
<td class="text-center" data-bind="text: moment(last_poll()).calendar()"></td>
<td class="text-right">
<div class="feedgraph">
<!-- D3 chart container -->
</div>
</td>
</tr>
</tbody>
...
在使用class="feedgraph"
的最后一个DIV中,我添加了(在这种情况下)D3图表,当DIV在foreach
之外时,它可以正常工作。但是,每次JSON轮询返回时,敲门都会重新呈现整个TR,无论JSON是否包含更改的值,我的.feedgraph
div都会被清空。
相关的viewmodel块:
...
self.cfeeds = ko.observableArray([]);
...
self.loadFeeds = function() {
postJSON(ajax_uri+'get_site_feeds/',{'site_id':selected_site_id},function(d){
self.cfeeds.removeAll();
$.each(d['configured_feeds'],function(i,v) {
self.cfeeds.push(new Feed(v));
});
setTimeout(vm.loadFeeds,5000);
});
};
...
$(function(){
vm.loadFeeds();
});
...
在我看来,只有当绑定值发生变化时,淘汰渲染才应该发生在原子TD级别,而不是像它看起来那样处于TR级别。
因此,我的问题是:有没有办法让淘汰赛不再重新呈现foreach
中的整行,而只是重新渲染具有数据绑定属性的TD单元格而不留下我的D3图表?