2017-01-01 14 views
1

ハイチャートをラップするカスタム要素(https://github.com/avdaredevil/highcharts-chart)でドミノリピートテンプレートを使用しようとしています。それは、データが変更されたときを除いて、主に動作しています。グラフに反映されていません。ポリマードームリピートが配列の変更を反映していない

DOMリピートテンプレート:私はラインthis.set('chartOptions', []); DOMリピートを削除した場合

observers: [ 
    'buildChartOptions(scenarios)', 
], 
buildChartOptions(scenarios) { 
    var i = 0; 
    this.set('chartOptions', []); 
    for (i = 0; i < scenarios.length; i += 1) { 
    this.push('chartOptions', buildCustomChartOptions(scenarios[i])); 
    } 
}, 

<template id="scenarioCharts" is="dom-repeat" items="{{chartOptions}}" as="chartOption"> 
    <highcharts-chart highchart-options="{{chartOption}}" /> 
    </template> 

ポリマーコードは(真の通知を持つプロパティである)chartOptionsを構築します古いものを保持し、新しいグラフを追加します。私もsplicesnotifySplicesで多くの異なることを試しましたが、古いチャートが新しいものに置き換えられているという希望の結果を生む運がなかった。

ありがとうございました

+0

これは恐らく[''バグ](https://github.com/Polymer/polymer/issues/1713#issuecomment-108729265)に関連しています。 – tony19

答えて

1

私はtony19と同じバグを参照します。私はおそらく、ローカル配列を作成し、それを移入し、このように、再びそれを設定したいけれども

あなたのコードは、良い回避策のようだ:

buildChartOptions(scenarios) { 
    var newArray = []; 
    for (var i = 0; i < scenarios.length; i += 1) { 
    newArray.push(buildCustomChartOptions(scenarios[i])); 
    } 
    this.set('chartOptions', newArray); 
} 

別の方法としては、への変更をプッシュするだろう配列を作成して、this.$.scenarioCharts.render();を実行して、dom-repeatを強制的にレンダリングします。

さらに
buildChartOptions(scenarios) { 
    for (var i = 0; i < scenarios.length; i += 1) { 
     this.push('chartOptions',buildCustomChartOptions(scenarios[i])); 
    } 
    this.$.scenarioCharts.render(); 
} 

、それはあなたの質問には関係しませんが、私はこのようなポリマーで関数を宣言するお勧めします:

あなたは、私はそれがうまくいくか分からない、しかし、それを試してみる必要があるだろう

buildChartOptions: function(scenarios) { }

代わりの

buildChartOptions(scenarions) { }

私は時々あなたがやった同じことを忘れてください、結果はInternet ExplorerやFirefoxとの互換性の問題です...しかし、あなたが示唆したようにすれば、すべて正常に動作します。

+0

'this.set( 'chartOptions'、[])'の後に置くとレンダリングが強制的に実行されます。 –

+0

したがって、chartOptions配列を[]に設定する必要があります。これはpittyです。レンダリングでdom-repeatの内容が破棄され、新しい配列の内容でレンダリングされることを期待していましたが、最初に配列を変更します。 – mauro1855