2017-04-06 5 views
1

私はサブプロパティを含む配列を持っています。サブプロパティもオブジェクトとサブ配列です。Polymerは直ちに汚れチェックと割り当てを行った後、完全なdom-repeatを実行します

サーバからAPIレスポンスを受け取ったときにdom-repeatを使用して表示していましたが、同じフォーマットの別のAPIレスポンスを値のマイナーチェンジで取得した場合、古い配列を新しい

<template is="dom-repeat" items="{{arr}}"> 
//paper list codes for display 
</temlate> 

    this.arr = []; 
    this.arr = newArrayFromResponse; 

のようにチェックしますが、私はこれだけで、いくつかの論文リストを行う際に汚れを持つ配列は DOM-repeatがすべてのノードを作成しません、それだけでその値が変更されているこれらのノードを更新します、その値が変更された更新します。

this.arr = [];のような配列を消去すると、この場合、すべてのノードが破棄されます。

ただし、すぐにもう一度割り当てを変更するとノードが更新されます。

すべてのノードをクリアしてdom-repeatをゼロから実行する方法はありますか? 私はポリマーアレイの変異とレンダリング()関数を試して、うまくいかなかったhttps://github.com/Polymer/polymer/issues/4041を挙げました!!毎回 それは空白の画面のように、最初にレンダリングし、即時

+0

期待される結果は?なぜあなたはポリマーアレイ変異を使用しないのですか? this.set( 'arr'、null)を使用し、this.set( 'arr'、newArrayFromResponse)を使用するとうまくいくはずです。少なくとも私のプロジェクトでは、私はそれをやって、すべてがうまくいけば(ノードはhtmlから完全に削除されます)。私はポイントを適切に得られなかった。 –

+0

dom-repeatを使用して生成された10個のリストがある場合、次に3個のリスト値のみが変更されたと仮定します。この場合、他の7個のリストをすべて保持して3個のリストを更新します。私が望むのは、私が汚れていることを確認すると、空の画面のようなすべてのノードを数秒間消去し、10個のノードを新鮮なコピーとして再度再生することです。 –

答えて

2

をレンダリングしているよう

は、私は同様の方法でDOMリピートをレンダリングする必要がある私は、ポリマーは、いくつかの値が変更されていないことを検出したと考えると、いくつかのパフォーマンスの最適化がありますハプニング。新しい値を非同期に設定してみることもできます。

this.arr = []; 

this.async(function() { 
    this.arr = newArrayFromResponse; 
}); 

なぜこのコードは動作しませんか?正確に知るには、ポリマーコードを調べる必要があります。私の推測では、Polymerは各割り当て後にすぐにDOMをthis.arrに更新するのではなく、少し後にDOMを更新するということです。それが更新されると、あなたの解決策ではthis.arr = newArrayFromResponseが発生し、空の配列は決してレンダリングされません。 Polymerはおそらくまだ古い配列のコピーを持っていて、いくつかの新しい項目を持つ同じ配列であり、新しい項目を追加するだけであることを認識しています。私の解決策はごくわずかな遅延をもたらす。したがって、Polymerは空の配列をレンダリングし、後で新しいものをレンダリングします。

+0

thanks sis !!これはうまくいきました.. –

+0

実際に何をしているのですか?これはどのように機能しますか?私は100ノードの長いリストを持っていると仮定してロードするには時間がかかります、あなたは最適化テクニックを知っていますか? –

+0

私は何が起こっていると思うか説明しようとしました。 100ノードではPolymerに最適化をさせるのが良いでしょうが、それではすべてのノードをクリアしないと – Maria

関連する問題