5

Ich versuche, Änderungen an einem Array von Objekten zu beobachten, die an ein Polymerelement übergeben werden. Wenn ein neues Element zum Array hinzugefügt wird, wird das Array auch im Element "Polymer" geändert. Die Beobachtermethode wird jedoch nie aufgerufen.Polymer 1.0 Array-Observer bei Bindungsänderung

Element enthält

<dom-module is="table-container"> 
    <template> 
    <selectable-table table-items="{{items}}"></selectable-table> 
    <button on-click="addItem">Add Item</button>  
    </template> 
    <script> 
    Polymer({ 
     is : "table-container", 
     attached : function() { 
     this.items = []; 
     for (var i = 0; i < 3; i++) { 
      this.push("items", { 
      numerical: "1", 
      english: "one" 
      }); 
     } 
     }, 
     addItem : function() { 
     this.push("items", { 
      numerical: "3", 
      english: "three" 
     }) 
     } 
    }) 
    </script> 
</dom-module> 

Den Versuch, Veränderungen zu beobachten, hier:

<dom-module id="selectable-table> 
    <template> 
    <div>{{tableItems}}</div> 
    </template> 
    <script> 
    Polymer({ 
     is : "selectable-table", 
     properties : { 
     tableItems: { 
      type: Object, 
      notify: true, 
      observer: "updateTableItems" 
     } 
     } 
     updateTableItems : function() { 
     // Updates here 
     } 
    }); 
    </script> 
</dom-module> 

Die „updateTableItems“ Methode zunächst wird aufgerufen, wenn das Element-Array zuerst gefüllt wird, aber nie, wenn die Schaltfläche geklickt wird um weitere Objekte hinzuzufügen.

Antwort

8

Um Änderungen am Array zu beobachten, verwenden Sie den folgenden Stil von Beobachtern.

Polymer({ 
    is : "selectable-table", 
    properties : { 
    tableItems: { 
     type: Array, 
     notify: true, 
    } 
    }, 

    observers: [ 
     'updateTableItems(tableItems.*)' 
    ], 
    updateTableItems : function() { 
    // Updates here 
    } 
}); 

Da tableItems ist ein Array von Objekten, sollten Sie Art Array in Ihrer Eigenschaft Erklärung verwenden. Der Typ des von Ihnen verwendeten Beobachters wird nur ausgelöst, wenn Sie der Eigenschaft tableItems eine neue Array-Instanz zuweisen. Fügen Sie für Manipulationen des Arrays Ihren Rückruf zu observers hinzu. Weitere Informationen finden Sie in der.