私はFirebaseデータベースに保存した対応するパーティーの下にすべての候補者のリストを表示しようとしています。私はPolymer 2.0 Starter-Kitを使用しています。ポリマー2.0データバインディングアレイ
ここでは、コードです:
_checkParties() {
var candidate_list = []
firebase.database().ref("/candidates/"+this.party.$key).once("value", function(snapshot) {
snapshot.forEach(function(snap) {
var data = {"key": snap.key, "data": snap.val()}
var results = Object.keys(data["data"]).map(function(key) {
return {
name: key,
value: data["data"][key],
key: data["key"]
};
})
candidate_list.push(results[0])
})
})
this.candidates = candidate_list;
}
は基本的に私は私のfirebaseからそのパスの子を照会していますが、その後、私のvar candidate_list
にそれらを追加。クエリ以外では、this.candidates
を配列var candidate_list
に設定しました。
ここに私のテンプレートのコードです:
<template is="dom-repeat" items="{{ candidates }}" as="candidate">
<div class="card">
<p>[[candidates]]</p>
<h3>[[candidate.name]] - [[candidate.value]]</h3>
<paper-button raised style="color: yellow; background-color: black;" on-tap="_castVote">Vote</paper-button>
</div>
</template>
私の静的プロパティへのコード:
candidates: {
type: Array,
value: []
}
その後、私のコンストラクタ:
constructor() {
super();
}
私は、コンストラクタにこれを追加してみましたが、しかしそれは何にも影響しないようです:
constructor() {
super();
this.candidates = [];
}
結果は、テンプレートdom-repeatのカードがすべての候補を表示することになります。代わりに私は何も表示されていない取得しています。 しかし、私はconsole.log
私は私のすべての候補者を見ることができた。
私は実際に 'this.set()'を試しましたが、 'this'は認識されませんでした。私は、ループの外側で 'var self = this'を実行することで回避することができました。私は計算したが、試していない。パフォーマンスはどれが良いですか? 'computed'または' this.set'ですか? – Mikebarson
@Mikebarsonだから、あなたはsetメソッドを使って動作させると言っていますか?ところで、もしあなたがES6を使っても大丈夫なら、矢印関数の構文を使って 'this'キーワードをバインドしないようにすることができます。そうすれば、スコープを別の変数に"キャッシュ "する必要はありません。オブザーバとsetメソッドを使ってリストを設定した場合とのパフォーマンスの違いについては、実際に何が起こったのかという理由で、計算されたプロパティを使用するのは理にかなっています。しかし、私はあなたが最も適した方法を使うことができると思います。 – mishu
はいsetメソッドを使用しました。だからパフォーマンスに違いはありません。 ES6の構文を明確にすることはできますか?私はこのES6のシステム全体には全く新しいものです。それはこのようなものですか? 'function()=>'? – Mikebarson