2016-04-03 97 views
2

我試圖做一個關於observeNodes聚合物設施的簡單測試。本質上,我的代碼定義了組件上的子節點更改的觀察者。聚合物觀察節點不起作用

<dom-module id="wc-A"> 
    <template> 
     <div>Added Nodes : <span id="added"></span></div> 
     <div>Removed Nodes : <span id="removed"></span></div> 
    </template> 
    <script> 
     Polymer ({ 
     is: 'wc-A', 
     ready: function() { 
      Polymer 
       .dom (this) 
       .observeNodes (function (nodes) { 
        console.log (nodes) 
        this.$.added.textContent = nodes.addedNodes.length; 
        this.$.removed.textContent = nodes.removedNodes.length; 
       }); 
     }  
     }); 
    </script> 
</dom-module> 

這個例子上正常工作創建時間(從我的測試span#added含5-8 span#removed包含0),但是當我以編程方式添加/刪除上的光span的元素DOM,觀察機制不響應(不要換)。這是我的測試:

<div> 
    <button id="btnAdd">New</button> 
    <button id="btnRemove">Remove</button> 
</div> 

<wc-A> <!-- (1) Fires observer --> 
    <div class="data">1</div> 
    <div class="data">2</div> 
</wc-A> 

<template id=template> 
    <div class="data">3</div> 
</template> 

<script> 
    HTMLImports.whenReady (function() { 
     document 
      .querySelector ('#btnAdd') 
      .addEventListener ('click', function (e) { 
       var template = document.querySelector ('#template').content; 
       var div = template.querySelector ('div'); 
       var wcA = document.querySelector ('wc-A') 
       wcA.appendChild (div.cloneNode (true)); // (2) Does not fire observer 
      }); 

     document 
      .querySelector ('#btnRemove') 
      .addEventListener ('click', function (e) { 
      var wcA = document.querySelector ('wc-A') 
      var child = wcA.querySelector ('.data'); 
      if (child) 
      wcA.removeChild (// (3) Does not fire observer 
       child 
      ); 
      }); 
    }); 
</script> 

完整的代碼可以檢查http://plnkr.co/edit/DHiH40T3pBLx9Nu6Tv3W?p=preview

什麼是我的錯誤?提前致謝。

+0

猜你有這個網頁已經打開:https://www.polymer-project.org /1.0/docs/devguide/local-dom.html#observe-nodes 我試着對你的plunker做一些快速的修改,添加了一個'content'標籤,但是這也沒有幫助,但是看到div加入了隨着這一變化。 似乎有點類似於這個問題:http://stackoverflow.com/questions/34286381/observenodes-for-distributed-content 這就是說,我有一個元素,但我沒有爲我工作的observenodes以編程方式添加孩子,但是依靠'dom-if',也許他們是如何添加的? #askpolymer – Bulan

回答