2015-10-16 9 views
5

私はAureliaでコレクションの更新を処理する最良の方法を苦労しています。私はモデルを次の中からrepeat.forsのセットを使用して構築されているビュー(コメント付きニュースのリスト)を持っていることを想像:aureliaでコレクションの更新を扱う

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を再構築します(各下ということを想像してみてニュースはコメントを入力するためのテキストエリアです)。

どのようにこのシナリオで作業しますか?これは、汚れたチェックとngRepeatの動作(角度は変更されていないオブジェクトに対応するDOMを破壊しない)のため、Angularでは非常にうまく動作します。

Aureliaでこのシナリオをどのように扱いますか?

+0

私はあなたがShadowDOMではなくReactの "仮想" DOMを意味すると信じています。 –

+0

はいいいえ –

+0

あなたはこれを解決しましたか?私は昨年も同様の問題を抱えていましたが、満足のいく解決策を得られませんでした。 –

答えて

2

質問は実際にコレクションに関するものではありません。これはJSの一般的な質問です。 How to duplicate object properties in another object?

あなたは実際にそれをかなりうまく処理できます。

次のことが可能です。

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) 
    } 
}) 
関連する問題