我正在开发一个项目,我将Polymer与Firebase结合使用。我有一个旋钮元素,它只是一个值,存储在Firebase中。聚合物观察者观察旋钮的值,当值改变时更新火碱值。
问题如下:当在一个地方更改值时,它会更新firebase值。这会向所有其他地方发出更改事件。在其他地方,这会使元素中的值被设置,从而触发观察者。该观察者导致再次设置firebase值。这又会再次发出变化,等等......这会在调整旋钮时导致滞后行为。我该怎么办?
<script>
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/"+this.channel+'/'+this.channelNumber);
ref.on("child_changed", function(data) {
this.midiValue = data.val();
}.bind(this));
return ref;
},
_valueChanged: function() {
var message = { value: this.midiValue, channel: this.channel, channelNumber: this.channelNumber };
if (this.ref) {
this.ref.set(message);
}
}
});
</script>
答案 0 :(得分:0)
如何而不是
ref.on("child_changed", function(data) {
你使用
ref.once("child_changed", function(data) {
仅在启动时获取firebase的值&amp;之后,您只更新firebase中的值。
当然取决于您的整体应用程序架构,但从您在此处显示的内容看来似乎没问题。