Polymer 1.0观察者 - 不在数组上工作

Gil*_*erg 5 arrays push observers polymer

我设置了一个观察者来捕获属性数组上的所有聚合物识别事件,但我抓住它来捕捉变化.在我的示例中,我的观察者函数"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>
Run Code Online (Sandbox Code Playgroud)

我也尝试在观察者中使用bigs.push但没有成功.我不明白的一个部分是,如果我将以下行添加到我的"updateAll"函数中,观察者会捕获更改并触发"bigup".

this.bigs=[];
Run Code Online (Sandbox Code Playgroud)

Ash*_*ton 6

对我来说,这篇文章也很有用,它涵盖了注册观察者的方式以及Justin XL建议的拼接方法.

注册观察员:

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

  observers: [
    'usersAddedOrRemoved(users.splices)'
  ],
Run Code Online (Sandbox Code Playgroud)

使用Polymer 1.0方式调用拼接方法:

this.push('users', 'TestUser');
Run Code Online (Sandbox Code Playgroud)

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

仅供参考 - 这不适用于所有情况(我最初的想法) 当您在属性声明中注册观察者时,如下所示:

 properties: {
        users: {
          type: Array,
          value: function() {
            return [];
          },
          observer: 'usersAddedOrRemoved'
        }
      },
Run Code Online (Sandbox Code Playgroud)

在这种情况下,usersAddedOrRemoved只有在为用户对象分配新数组时才会调用该方法.但是,当你通过推,弹出,拼接等方式改变数组时,它不会触发.


Jus*_* XL 2

您需要使用pushPolymer 中的方法而不是执行this.bigs.push.

因此将该行代码替换为

this.push('bigs', {'conversation':[{'message':'hola'}]});
Run Code Online (Sandbox Code Playgroud)

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