Giống như tiêu đề cho biết. Có cách nào để sửa đổi một giá trị quan sát mà không kích hoạt gọi lại quan sát trong Polymer?Có cách nào để sửa đổi giá trị được quan sát mà không kích hoạt gọi lại quan sát viên trong Polymer
Ví dụ
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);
}
}
});
Đây sẽ là hữu ích vì bây giờ tôi đang trải qua tụt hậu trong các tình huống sau:
- Thích ứng
aValue
trong một ứng dụng của bên thứ ba - cập nhật căn cứ hỏa lực tất cả khách hàng
- Gọi lại .on đặt giá trị và kích hoạt lời gọi lại của người quan sát
- Nguyên nhân một .set đến căn cứ hỏa lực
- quay trở lại 2.
Cập nhật: Vấn đề không phải là căn cứ hỏa lực liên quan. Tôi tin rằng giải pháp là kiểm soát cách cập nhật được áp dụng cho các giá trị quan sát được trong Polymer. Một phần vì thay đổi các giá trị trong cửa hàng firebase có thể được thực hiện bởi bên thứ 3 (không nhất thiết phải là web) ứng dụng quá.
thể trùng lặp của [nguyên nhân căn cứ hỏa lực đồng bộ tụt hậu] (http://stackoverflow.com/questions/32529499/firebase-syncing-causes-lag) –
Bạn có thể thêm biến firebaseValue mới và cập nhật nó trong hàm _computeRef của bạn. Trong hàm _valueChanged, hãy gọi ref.set chỉ khi aValue khác với firebaseValue. – Srik