我正试图弄清楚如何在聚合物中使用双向通知here
但是,虽然这解释了有一些机制可以通知子元素上的对象是否发生了变化:
当使用type:Object配置的属性的子属性时 更改时,元素会触发非冒泡的DOM事件 with detail.path值指示对象上的路径 改变。
但它没有提供任何线索(我可以理清)语法如何根据此更改编写脚本行为。
例如,如果我有父母:
<dom-module id="parent-element">
<template>
<child-element obj="{{myObj}}"></child-element>
</template>
<script>
Polymer({
is: "parent-element",
myObj: {
type: Object
},
parentClick: function(){
this.myName = "Parent";
},
myObjChanged: function(){ //How to handle this event?
console.log("I have no idea what I'm doing")
}
});
</script>
我有一个子元素:
<dom-module id="child-element">
<template>
<span on-click="childClick">Click me</span>
</template>
<script>
Polymer({
is: 'child-element',
properties: {
obj: {
type: Object,
notify: true
}
},
ready: function(){
this.obj = {foo: "bar"}
},
childClick: function(){
this.obj.foo = "baz"
}
});
</script>
当点击孩子时,我希望某个事件能够触发并被父母接收,但我不知道如何在父母那个脚本上编写脚本。我错过了什么?
答案 0 :(得分:0)
我最近遇到了这个问题并通过解雇我自己的事件来做到这一点。您可以看到here的文档(请注意,此文档适用于0.5,但我已使用1.0版完成此操作)。在您的子元素中,您可以更改childClick
函数以触发自定义事件,如下所示:
childClick: function(){
this.obj.foo = "baz"
this.fire("child-element-click"); // this can be anything you want...
}
然后在您的父元素中添加一个监听器child-element
:
<dom-module id="parent-element">
<template>
<child-element obj="{{myObj}}" on-child-element-click="myObjChanged"></child-element>
</template>
<script>
Polymer({
is: "parent-element",
myObj: {
type: Object
},
parentClick: function () {
this.myName = "Parent";
},
myObjChanged: function () {
console.log("I have no idea what I'm doing")
}
});
</script>