gpt4 book ai didi

polymer - 有没有办法在不触发 Polymer 中的观察者回调的情况下修改观察值

转载 作者:行者123 更新时间:2023-12-04 12:40:21 25 4
gpt4 key购买 nike

正如标题所说。有没有办法在不触发 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 存储中的值。

    最佳答案

    据我所知,没有内置的方法来设置属性值而不触发它的观察者。

    您无法控制如何/何时/使用什么参数调用观察者,但您可以控制过程主体,幸运的是,您正在使用共享状态( this )。

    因此,您可以根据可以从函数内部访问但不必传入的标志来修改函数的行为。

    例如:

    _valueChanged: function (new_val, old_val) {
    if (this._observerLock) { return; }

    var message = { aValue: this.aValue };
    if (this.ref) {
    this.ref.set(message);
    }
    }
    },
    ...

    然后,您可以实现 _setWithoutCallingObserver()方法如:
    _setWithoutCallingObserver: function (value) {
    this._observerLock = true;
    this.aValue = value;
    this._observerLock = false;
    }

    关于polymer - 有没有办法在不触发 Polymer 中的观察者回调的情况下修改观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669583/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com