我正在从事一个项目,其中我使用聚合物与Firebase的组合。我有一个旋钮元素,它只是一个旋钮,它的值存储在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>发布于 2015-09-13 01:12:42
如果不是这样呢
ref.on("child_changed", function(data) {您可以使用
ref.once("child_changed", function(data) {为了只在启动时从firebase获取值,在此之后,您只需更新firebase中的值。
当然,这取决于你的整体应用架构,但从你在这里展示的情况看,这似乎还可以。
https://stackoverflow.com/questions/32529499
复制相似问题