我有一个v-fire聚合物:
<script>
Polymer({
is: 'v-fire',
properties : {
onFire: {
type : String,
reflectToAttribute: true
}
},
firing: function () {
this.fire('fire');
}
})
</script>
我希望能够在我的Polymer元素中的任何地方使用它,以使其触发内部函数,以使其执行诸如update之类的特定任务,因此当
v-fire
调用firing
时,它们将全部更新。例如,我创建了一个新对象进行测试:
<script>
Polymer({
is: 'fire-tester',
_updateContent: function () {
alert('I get updated');
}
});
</script>
在index.html中
…
<link rel="import" href="/components/fire-tester/fire-tester.html">
…
<body>
<fire-tester id="fire-tester"></fire-tester>
<script>
(function () {
var ft = document.getElementById('fire-tester');
// make a global v-fire Polymer
var vfire = document.createElement('v-fire');
// custom callback of the Polymer's that will include the v-fire
vfire.onFire = '_updateContent';
/**
* And here, I try to insert the v-fire in the fire-tester Polymer
*/
Polymer.dom(ft.root).insertBefore(
vfire,
Polymer.dom(ft.root).childNodes[0]
);
// the dom is pretty neat, fire-tester contains v-fire with the custom on-fire callback
// then I try to fire the event
vfire.firing(); // but nothing happen
});
</script>
这是行不通的,因为我相信将v-fire插入火灾测试仪后不会对其进行处理。有没有办法告诉Polymer处理dom块,就像在本地DOM中声明它一样?
最佳答案
看来您正在错误地接近事件系统。您想要的是在检测到子fire-tester
元素上的fire
事件时在v-fire
上运行方法,对吗?这就是我将其组合在一起的方式:
v-fire.html
<script>
Polymer({
is: 'v-fire',
firing: function() {
this.fire('fire');
}
});
</script>
fire-tester.html
<script>
Polymer({
is: 'fire-tester',
listeners: {
'fire': '_updateContent'
},
_updateContent: function () {
alert('I get updated');
}
});
</script>
index.html
<fire-tester id="fire-tester"></fire-tester>
<script>
(function(){
var ft = document.getElementById('fire-tester');
var vfire = document.createElement('v-fire');
Polymer.dom(ft.root).insertBefore(
vfire,
Polymer.dom(ft.root).childNodes[0]
);
vfire.firing();
})();
</script>