2015-08-27 236 views
0

我已經定義的聚合物元件聚合物雙向數據綁定

Polymer({ 
     is: 'disco-ccontrol', 

     properties: { 
      midiValue: { 
       type: Number, 
       value: 0, 
       observer: '_valueChanged', 
       notify: true 
      }, 
      channel: { 
       type: Number, 
       value: 0 
      }, 
      channelNumber: { 
       type: Number, 
       value: 0 
      }, 
      ref: { 
       type: Object, 
       computed: '_computeRef(channel, channelNumber)' 
      } 
     }, 

     _computeRef: function(channel, channelNumber) { 

      var ref = new Firebase("https://incandescent-inferno-8405.firebaseio.com/user/"+channel+"/"+channelNumber); 
      ref.on("value", function(data) { 
       this.midiValue = data.val().value; 
      }); 

      return ref; 
     }, 

     _valueChanged: function() { 
      var message = { value: this.midiValue, channel: this.channel, channelNumber: this.channelNumber }; 
      if (this.ref) { 
       this.ref.set(message); 
      } 
     } 

    }); 

我在另一元件使用該元素(父元素)

<disco-ccontrol midi-value="{{value}}" channel="{{channel}}" cn="{{channelNumber}}"></disco-ccontrol> 

當我在父適應value屬性它傳播給孩子。當我改變孩子的值屬性(即在disco-ccontrol中)時,它不會傳播。我做錯了什麼建立雙向綁定?

回答

1

在此功能

ref.on("value", function(data) { 
    this.midiValue = data.val().value; 
}); 

this關鍵字未與聚合物結合元件。因此,您不會將midi值設置在正確的對象上。您可以使用bindthis綁定到聚合物元素。

ref.on("value", function(data) { 
    this.midiValue = data.val().value; 
}.bind(this);