Events 嵌套组件之间的polymer 1.0事件触发

Events 嵌套组件之间的polymer 1.0事件触发,events,polymer,listener,polymer-1.0,Events,Polymer,Listener,Polymer 1.0,我在Polymer 1.0中遇到了一个与web组件嵌套结构中的事件传播相关的问题。特别是,我试图通过位于其本地DOM中名为wc split rule的其他组件的集合来动态配置名为wc split的web组件。以下代码片段显示了正确的使用形式: <wc-split-test> <wc-split> <wc-split-rule key="{{k1}}" ...></wc-split-rule> <wc-s

我在Polymer 1.0中遇到了一个与web组件嵌套结构中的事件传播相关的问题。特别是,我试图通过位于其本地DOM中名为
wc split rule
的其他组件的集合来动态配置名为
wc split
的web组件。以下代码片段显示了正确的使用形式:

<wc-split-test>
    <wc-split>
        <wc-split-rule key="{{k1}}" ...></wc-split-rule>
        <wc-split-rule key="{{k2}}" ...></wc-split-rule>
        <wc-split-rule key="{{k3}}" ...></wc-split-rule>
   </wc-split> 
</wc-split-test>
下面的列表显示了这两个组件的实现[:


聚合物({
是:“wc分割规则”,
特性:{
关键:{
类型:字符串,
reflectToAttribute:true,
通知:正确,
值:“”,
观察家:"你改变了"
},
}, 
_已更改:函数(){
此.fire('wc-split-rule'{
钥匙:这个,钥匙,
});                        
}    
});
聚合物({
是“wc split”,
听众:{
“wc分割规则”:“onRule”
},
就绪:函数(){
...
},
onRule:函数(事件、上下文){
…//这是在测试[1]中执行的,[2]不是在[3]中执行的
}
});     
...
令人惊讶的是,Polymer 0.5上的相同代码适用于每个测试场景[:


聚合物(“wc-split-rule”{
出版:{
键:“”,
},
注意:{
键:“\u已更改”,
},
_已更改:函数(){
此.fire('wc-split-rule'{
钥匙:这个,钥匙,
});                        
}    
});
聚合物('wc-split',{
就绪:函数(){
...
},                   
onRule:函数(事件、上下文){
…//始终执行此操作
}
});     
...

这归结为一个时间问题。
wc分割规则
事件在注册
wc分割
元素之前触发。因此,该事件将丢失。这只是元素首次启动时的一个问题。b/c您有一个父元素,也是一个自定义元素。解决此问题的一个方法是确保事件附加
wc拆分规则后的res:

attached: function() {
  this._changed();
},

这是有效的:

运行您的示例时,家长似乎收到了一个事件。您能澄清问题吗?您希望1.0示例做什么,而它现在没有做?感谢DocDude的帮助。我已经重写了问题。请看一看,好吗?
    <dom-module id="wc-split-rule">
        <script>                
            Polymer({
                is: 'wc-split-rule',  

                properties: {
                    key  : {
                        type: String,
                        reflectToAttribute: true,
                        notify: true,
                        value: '',
                        observer: '_changed'
                    },
                }, 

                _changed: function (){
                    this.fire('wc-split-rule', {
                        key     : this.key,
                    });                        
                }    

            });
        </script>
    </dom-module>


    <dom-module id="wc-split">   
        <template>
           <content></content>         
        </template>

        <script>     
            Polymer( { 
                is: 'wc-split', 

                listeners: {
                    'wc-split-rule': 'onRule'
                },

                ready: function(){
                   ...
                },

                onRule: function (event, context){
                    ... // this is executed in test [1] and [2] NOT in [3]                        
                }
            });     
        </script>

    </dom-module>


    <dom-module id="wc-split-test">          
        <template>              
            <wc-split id="split">
                <wc-split-rule key="e1"/>                        
            </wc-split>            
        </template>

        <script>     
            ...
        </script>

    </dom-module>
    <polymer-element name="wc-split-rule">  
        <script>

            Polymer('wc-split-rule', {
                publish : {
                    key     : '',                       
                },

                observe: {
                    key     : '_changed',                       
                },

                _changed: function (){
                    this.fire('wc-split-rule', {
                        key     : this.key,
                    });                        
                }    

            });
        </script>
    </polymer-element>


    <polymer-element name="wc-split">
        <template>
            <div on-wc-split-rule="{{onRule}}">
                <content select="wc-split-rule"></content>
            </div>
            <content></content>        
        </template>
        <script>

            Polymer('wc-split', {                    

                ready: function(){
                    ...
                },                   

                onRule: function (event, context){
                    ... // this is always executed
                }
            });     
        </script>

    </polymer-element>


     <polymer-element name="wc-split-test">
        <template>              
            <wc-split id="split">
                <wc-split-rule key="e1"/>                        
            </wc-split>            
        </template>

        <script>
            ...
        </script>

    </polymer-element>       
attached: function() {
  this._changed();
},