2015-08-25 14 views
5

Ich setze einen Beobachter auf, um alle Polymer erkannte Ereignisse auf einer Eigenschaft, die ein Array ist zu fangen, aber ich fange es, um die Veränderung zu fangen. In meinem Beispiel unten wird meine Beobachterfunktion "bigup" nur aufgerufen, wenn zuerst die Eigenschaft "bigs" initialisiert wird.Polymer 1.0 Beobachter - funktioniert nicht auf 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> 

Ich habe auch versucht, in dem Beobachter zu verwenden bigs.push hatte aber keinen Erfolg. Ein Teil, den ich nicht verstehe, ist, dass, wenn ich meiner "updateAll" -Funktion die folgende Zeile hinzufüge, der Beobachter die Änderung abfängt und "bigup" feuert.

this.bigs=[]; 

Antwort

2

Sie benötigen die push Methode von Polymer zu verwenden, anstatt this.bigs.push zu tun.

ersetzen, so dass Codezeile mit

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

Für weitere Informationen haben einen Blick auf diese link.

+0

Gibt es eine Möglichkeit, Polymers Push auf ein Sub-Array einer Eigenschaft zu verwenden? – Gilberg

+1

Versuchen Sie 'this.push ('bigs.0', {'conversation': [{'message': 'hola'}]});', vorausgesetzt, die erste Eigenschaft ist das Subarray. –

5

Für mich war this article auch hilfreich, es deckt sowohl den Weg, den Beobachter zu registrieren, als auch die Spleißmethoden wie von Justin XL vorgeschlagen.

Registrieren den Betrachter:

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

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

Aufruf Spleißstellen Methoden, um die Polymer 1.0 Art und Weise:

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

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

FYI - das wird nicht in allen Fällen funktionieren (meine ursprüngliche Idee) Wenn Sie sich registrieren, die Beobachter in der Eigenschaftsdeklaration wie folgt aus:

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

In diesem Fall wird die usersAddedOrRemoved Methode nur aufgerufen, wenn Sie ein neues Array zuweisen, um die Benutzer-Objekt. Es wird jedoch nicht ausgelöst, wenn Sie das Array durch Drücken, Poppen, Spleißen usw. mutieren.

+0

Was ist der Grund für den Downvote? – Ashton

Verwandte Themen