2015-08-25 34 views
5

Ho impostato un osservatore su per catturare tutti gli eventi riconosciuti dal polimero su una proprietà che è un array, ma prendo per ottenerlo per rilevare la modifica. Nel mio esempio sotto la mia funzione di osservatore "bigup" viene chiamato solo quando la proprietà, "big" viene prima inizializzata.Osservatori di polimeri 1.0 - non funziona sull'array

<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> 

Ho anche cercato di usare bigs.push nell'osservatore ma non ha avuto successo. Una parte che non capisco è che se aggiungo la seguente riga alla mia funzione "updateAll", l'osservatore capta la modifica e spara "bigup".

this.bigs=[]; 

risposta

2

è necessario utilizzare il metodo push da Polymer invece di fare this.bigs.push.

Quindi sostituire quella riga di codice con

this.push('bigs', {'conversation':[{'message':'hola'}]}); 

Per maggiori informazioni date un'occhiata a questo link.

+0

c'è un modo per utilizzare la spinta di Polymer su un sottoarray di una proprietà? – Gilberg

+1

Prova 'this.push ('bigs.0', {'conversation': [{'message': 'hola'}]});', assumendo che la prima proprietà sia il subarray. –

5

Per me this article è stato utile, copre sia il modo di registrare l'osservatore che i metodi di giuntura come suggerito da Justin XL.

Registrazione l'osservatore:

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

    observers: [ 
    'usersAddedOrRemoved(users.splices)' 
    ], 

Calling giunzioni metodi modo Polymer 1.0:

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

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

proposito - questo non funzionerà in tutti i casi (la mia idea iniziale) Quando si registra l'osservatore nella dichiarazione proprietà come questa:

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

In questo caso il metodo usersAddedOrRemoved viene chiamato solo quando si assegna un nuovo array agli utenti oggetto. Tuttavia non funzionerà quando si muta la matrice premendo, scoppiando, impiombando, ecc.

+0

qual è la ragione per downvote? – Ashton