0

この関数はループになり、すべてのループ key1 と key2 が変更されます...問題は、配列であるデータベースの結果がキーのすべてのデータを取得せず、最後のデータのみを記録することです。

GettingData: function(key1,key2){
       var list=[];
       console.log('Getting Data of '+key2);
       var ref = firebase.database().ref('/users/'+key1+'/products/'+key2).orderByKey().equalTo('name');
       ref.on('child_added', function(data) {
       console.log(data.val());
       list.unshift(data.val());
       this.databaseresult = list;
       console.log('Productdata of '+ key1 +' is LOADED');
       console.log('pushing to array '+list);
       console.log(this.databaseresult);
       this.$.results.products = this.databaseresult;
       }.bind(this));
       },
4

1 に答える 1

0

オブザーバーに通知する場合は、プロパティを変更するときに を使用しますthis.set('propertyName', value);。またthis.$.results.products = this.databaseresult;、現在のコードで設定が更新されない場合、さらに Polymer.set メソッドを使用してもデータバインディングにならない場合でも、ポリマーデータバインディング構文 IE を使用する必要があるため、期待していると思います<x-element products="{{databaseresult}}"></x-element>。少なくとも私の知る限り、手動で強制できる可能性があります。this.fire('databaseresult-changed');イベントを呼び出すことによって。

GettingData: function(key1,key2){
  console.log('Getting Data of '+key2);
  var ref = firebase.database().ref('/users/'+key1+'/products/'+key2).orderByKey().equalTo('name');
  ref.on('child_added', function(data) {
    console.log('pushing value' + data.val() + 'to ' + this.databaseresult);
    this.push('databaseresult', data.val());
    console.log('Productdata of '+ key1 +' is LOADED');
  }.bind(this));
},

 <!-- One way binding -->
 <x-element id="results" products="[[databaseresults]]"></x-element>

 <!-- Two way binding -->
 <x-element id="results" products="{{databaseresults}}"></x-element>
于 2016-10-15T21:23:00.633 に答える