2016-12-14 82 views
0

我想将两个子节点追加到Polymer中的旋转木马上。这在Chrome中工作正常,但我得到以下控制台错误在Safari:选择一个动态创建的元素聚合物1.0 Safari

TypeError: null is not an object (evaluating 'this.$$('#' + this.slideId1 + '').appendChild')

有没有办法选择凭身份证在Safari中动态创建的节点?

我目前使用的是this.$$()聚合物法。

<l2t-paper-slider id="paperSlider" total-slides="{{slides}}"></l2t-paper-slider> 

<script> 
    Polymer({... 
    _appendNode: function() { 
     this.$$('#paperSlider').appendChild(this.slide); 
     this.$$('#' + this.slideId1 + '').appendChild(this.slideData); 
    } 
    }); 
</script> 
+0

您已经使用'this。$$正确查询了节点'。问题可能在于查询时节点尚未附加到DOM。如果在将'slideId'节点添加到DOM的相同函数中调用'_appendNode',则应该将查询推迟到下一个渲染。 – tony19

+0

我明白了......你会用什么样的设计模式来验证第一次追加的完成? – KVNA

+0

“第一次追加”是什么意思?第一次调用'_appendNode'?或者'_appendNode'中的第一个'appendChild'?什么将“slideId1”添加到DOM? – tony19

回答

1

您是否尝试过使用:

Polymer.dom(this.root).querySelectorAll("paper-card"); 

你的情况:

Polymer.dom(this.root).querySelectorAll("#paperSlider").appendChild(this.slide); 

记住的appendChild需要一个节点,所以你可能需要先创建一个

var mypaperSlider = Polymer.dom(this.root).querySelector('#paperSlider'); 
var slide = document.createElement('paper-slide'); 
Polymer.dom(this.root).querySelectorAll("#paperSlider").appendChild(slide);