【问题标题】:Polymer 1.0 observers - not working on arrayPolymer 1.0 观察者 - 不适用于数组
【发布时间】:2015-11-19 20:34:59
【问题描述】:

我设置了一个观察者来捕捉一个数组属性上的所有聚合物识别事件,但我捕捉到它来捕捉变化。在下面的示例中,我的观察者函数“bigup”仅在属性“bigs”第一次初始化时才被调用。

<dom-module id="parent-page">
<template>
    <paper-button on-click="updateAll">Update</paper-button>
</template>
<script>
    var temp=[];
    temp.push({'conversation':[{'message':'hello'}]});

    Polymer({
        is: 'parent-page',
        properties: {
            bigs: {
                type: Array,
                value: temp
            }
        },
        observers: [
            'bigup(bigs.*)'
        ],
        updateAll: function(){
            this.bigs.push({'conversation':[{'message':'hola'}]});
            console.dir(this.bigs);
        },
        bigup: function(){
            console.log('big Up');
        }
    });
</script>

我也尝试在观察者中使用 bigs.push 但没有成功。我不明白的一点是,如果我在“updateAll”函数中添加以下行,观察者会捕捉到变化并触发“bigup”。

this.bigs=[];

【问题讨论】:

    标签: arrays polymer push observers


    【解决方案1】:

    this article 对我来说也很有帮助,它涵盖了注册观察者的方式以及 Justin XL 建议的拼接方法。

    注册观察者:

    properties: {
        users: {
          type: Array,
          value: function() {
            return [];
          }
        }
      },
    
      observers: [
        'usersAddedOrRemoved(users.splices)'
      ],
    

    调用以 Polymer 1.0 的方式拼接方法:

    this.push('users', 'TestUser');
    

    https://www.polymer-project.org/1.0/docs/devguide/properties.html#array-observation

    仅供参考 - 这并非在所有情况下都有效(我最初的想法) 当您像这样在属性声明中注册观察者时:

     properties: {
            users: {
              type: Array,
              value: function() {
                return [];
              },
              observer: 'usersAddedOrRemoved'
            }
          },
    

    在这种情况下,usersAddedOrRemoved 方法仅在您将新数组分配给用户对象时调用。但是,当您通过推送、弹出、拼接等方式改变数组时,它不会触发。

    【讨论】:

      【解决方案2】:

      您需要使用 Polymer 中的 push 方法,而不是使用 this.bigs.push

      所以用

      替换那行代码
      this.push('bigs', {'conversation':[{'message':'hola'}]});
      

      欲了解更多信息,请查看此link

      【讨论】:

      • 有没有办法在属性的子数组上使用 Polymer 的推送?
      • 试试this.push('bigs.0', {'conversation':[{'message':'hola'}]});,假设第一个属性是子数组。
      猜你喜欢
      • 2016-06-10
      • 1970-01-01
      • 2015-12-30
      • 2016-05-23
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      相关资源
      最近更新 更多