2015-08-25 75 views
5

我設置了一個觀察者來捕獲一個數組屬性上的所有聚合物識別事件,但是我抓住它來捕捉這個變化。在我的例子中,我的觀察者函數「bigup」僅在屬性「bigs」首次初始化時才被調用。聚合物1.0觀察者 - 沒有在數組上工作

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

我也試過在觀察者使用bigs.push,但沒有成功。我不明白的一個部分是,如果我將以下行添加到我的「updateAll」函數中,觀察者捕獲更改並觸發「bigup」。

this.bigs=[]; 

回答

2

您需要使用從聚合物,而不是做this.bigs.pushpush方法。

所以替換該行的代碼

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

欲瞭解更多信息看看這個link

+0

有沒有辦法使用聚合物的屬性子陣列? – Gilberg

+1

嘗試'this.push('bigs.0',{'conversation':[{'message':'hola'}]});',假設第一個屬性是子數組。 –

5

對我來說this article也很有幫助,它既包括註冊觀察者的方式,也包括Justin XL建議的拼接方法。

註冊觀察員:

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

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

調用拼接方法聚合物1.0方式:

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

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

僅供參考 - 這不會在所有情況下工作(我最初的想法) 當您註冊在財產申報這樣的觀察者:

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

在這種情況下,當你分配一個新的數組給用戶對象的usersAddedOrRemoved方法只調用。然而,當你通過按壓,彈出,拼接等方式改變陣列時,它不會觸發。

+0

downvote的原因是什麼? – Ashton