Javascript 在aurelia中处理集合更新

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

我正在努力用最好的方式处理Aurelia的收藏更新。假设我有一个视图(带有评论的新闻列表),它是使用以下模型中的repeat.fors集构建的:

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。奥雷莉亚那时太不成熟了,会拖我后腿。