【发布时间】:2015-12-16 15:21:21
【问题描述】:
正如标题所说。有没有办法在不触发 Polymer 中的观察者回调的情况下修改观察值?
例如
Polymer({
is: 'my-component',
properties: {
aValue: {
type: Number,
value: 0,
observer: '_valueChanged',
notify: true
},
ref: {
type: Object,
computed: '_computeRef(channel, channelNumber)'
}
},
_computeRef: function(channel, channelNumber) {
var ref = new Firebase("/*link*/");
ref.on("child_changed", function(data) {
this.aValue.setWithoutCallingObserver(data.val());
}.bind(this));
return ref;
},
_valueChanged: function() {
var message = { aValue: this.aValue };
if (this.ref) {
this.ref.set(message);
}
}
});
这很有用,因为现在我在以下情况下遇到了延迟:
- 在第三方应用中适配
aValue - Firebase 更新所有客户端
- .on 回调设置值并触发观察者回调
- 导致 .set 成为 firebase
- 回到 2。
更新:该问题与 Firebase 无关。我相信解决方案是控制如何将更新应用于 Polymer 中的观察值。部分原因是第 3 方(不一定是 Web)应用程序也可以更改 firebase 存储中的值。
【问题讨论】:
-
您可以添加一个新变量 firebaseValue 并在您的 _computeRef 函数中更新它。在 _valueChanged 函数中,仅当 aValue 与 firebaseValue 不同时才调用 ref.set。