Javascript 在aurelia中处理集合更新
我正在努力用最好的方式处理Aurelia的收藏更新。假设我有一个视图(带有评论的新闻列表),它是使用以下模型中的repeat.fors集构建的:Javascript 在aurelia中处理集合更新,javascript,aurelia,Javascript,Aurelia,我正在努力用最好的方式处理Aurelia的收藏更新。假设我有一个视图(带有评论的新闻列表),它是使用以下模型中的repeat.fors集构建的: var news = [ { id: 1, title: 'Some title', comments : ['comment1'] }, { id: 2, title: 'Some title', comments : ['comm
var news = [
{
id: 1,
title: 'Some title',
comments : ['comment1']
},
{
id: 2,
title: 'Some title',
comments : ['comment1']
},
{
id: 3,
title: 'Some title',
comments : ['comment1']
}
];
我还使用setInterval()创建了计时器,它每秒获取新闻列表。现在想象一下下面的新闻列表回来了:
var freshNews = [
{
id: 1,
title: 'Some title',
comments : ['comment1', 'comment2']
},
{
id: 2,
title: 'Some title',
comments : ['comment1']
}
];
如果我在repeat.for中使用这个freshNews列表,它将重建整个DOM,显示新闻,导致闪烁,用户输入的数据丢失(假设每个新闻下都有用于输入评论的文本区域)
我如何处理这个场景?这在Angular中工作得非常好,这要归功于它的脏检查和ngRepeat的工作方式(Angular不会破坏对应于未更改对象的DOM),在React中,由于阴影DOM,它也会工作得很好
我如何处理Aurelia中的这种情况?问题实际上并不是关于集合。这是一个一般性的问题。 所以你可以很好地处理它 你可以:
iterate over your updates {
find a relevant object in news
if there is none {
just push the new one to collection
}
otherwise {
apply new values to the old one
}
}
即使将编辑器绑定到同一个对象,也不会破坏用户的评论
freshNews.forEach(n=>{
let update = news.find(o=>o.id==n.id)
if (!update) {
news.push(n)
}
else {
Object.assign(update,n)
}
})
只是一个评论,我相信你指的是React的“虚拟”DOM,而不是ShadowDOM。你解决了这个问题吗?去年我也遇到过类似的问题,但没有得到满意的解决方案。最后我甩了Aurelia,选择了Angular 1.x。奥雷莉亚那时太不成熟了,会拖我后腿。