【问题标题】:Two observers Polymer两个观察者聚合物
【发布时间】:2015-09-22 00:09:05
【问题描述】:

我有两个观察者,在每个观察者中我更改另一个观察者的属性值。在这种情况下,我不希望其他观察者执行。 如何更改观察者仅在从外部更改属性时执行?

谢谢

【问题讨论】:

    标签: polymer polymer-1.0


    【解决方案1】:

    您最好的选择是使用局部变量来停止更新。

    Polymer({
        is: 'my-element',
        properties: {
            myProperty: {
                type: String,
                observer: '_myObserverA'
            }
        },
        observers: [
            '_myObserverB(myProperty)'
        ],
        _myObserverA(newValue) {
            if(!this._localUpdate) {
                //do stuff here
            } else {
                this._localUpdate = false;
            }
        },
        _myObserverB(newValue) {
            this._localUpdate = true;
            //do stuff here
        }
    })
    

    【讨论】:

    • 但它们会有所不同,因为我真的改变了它们
    【解决方案2】:

    你必须使用这样的观察者:

    Polymer({
    
      is: 'x-custom',
    
      properties: {
        preload: Boolean,
        src: String,
        size: String
      },
    
      observers: [
        'updateImage(preload, src, size)'
      ],
    
      updateImage: function(preload, src, size) {
        // ... do work using dependent values
      }
    
    });
    

    更多信息在:https://www.polymer-project.org/1.0/docs/devguide/properties.html#multi-property-observers

    【讨论】:

    • 我不明白这是如何解决问题的。常规方式与这种方式有什么区别?它如何解决赛车状况?我想要 2 个观察者 1 到每个值。
    • 我不希望一个观察者导致另一个观察者工作
    • 这样您将一次监控所有属性。如果任何一个(或所有事件)发生变化,它只会调用一次处理程序。
    • 哦,我明白了。我没看懂,抱歉。因此,使用标志来阻止观察者方法应用其行为,就像@Srik 建议的那样,会让事情正常进行。
    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 2017-10-03
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2017-03-13
    • 2014-10-10
    • 2015-12-08
    相关资源
    最近更新 更多