关于绑定更改的Polymer 1.0数组观察器

j.f*_*ong 5 javascript web-component polymer custom-element polymer-1.0

我试图观察传递给Polymer元素的对象数组的更改.将新项添加到数组时,也会在Polymer元素中更改该数组.但是,从不调用观察者方法.

包含元素

<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>
Run Code Online (Sandbox Code Playgroud)

试着在这里观察变化:

<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>
Run Code Online (Sandbox Code Playgroud)

首先在第一次填充items数组时调用"updateTableItems"方法,但是在单击该按钮以添加更多对象时从不调用该方法.

Mar*_*ria 8

要观察数组的更改,请使用以下样式的观察者.

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

  observers: [
      'updateTableItems(tableItems.*)'
  ],
  updateTableItems : function() {
    // Updates here
  }
});
Run Code Online (Sandbox Code Playgroud)

因为tableItems是一个对象数组,所以应该Array在属性声明中使用type .如果为tableItems属性分配新的数组实例,则只会触发您使用的观察者类型.对于数组的操作,将回调添加到observers.您可以在文档中找到更多详细信息.