Polymer 1.0 观察者 - 不适用于数组

Polymer 1.0 observers - not working on array

我设置了一个观察器来捕捉数组 属性 上的所有聚合物识别事件,但我捕捉到它来捕捉变化。在我下面的示例中,我的观察者函数 "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=[];

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

所以用

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

有关详细信息,请查看此 link

对我来说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 方法仅在您将新数组分配给用户对象时调用。但是,当您通过压入、弹出、拼接等方式改变数组时,它不会触发。