使用 polymer 1.1。使用以下设置,数据绑定(bind)似乎无法正确更新(如预期):
Polymer({
is: 'place-detail',
properties: {
selectedplace: {
type: Object,
notify: true,
reflectToAttribute: true //testing
}
},
observers: [
'placeHandler(selectedplace)'
],
editName: function(newname) {
if (newname !== this.selectedplace.name) {
this.debounce('updateDescription', function(){
this.set('selectedplace.name', newname);
this.set('selectedplace.dirty', true);
}, 1000);
}
}
});
将 newname
传递给 editName
方法会更新 selectedplace
对象,并且更改会传播到监视 {{selectedplace .name}}
在本地 DOM 中。
但是,这些更改不会传播到父元素属性,也不会传播到任何观察该对象的观察者,例如 placeHandler
。为了让观察者发挥作用,需要深度观察:
observers: [
'placeHandler(selectedplace.*)'
]
这是预期的行为吗?如果是这样,我如何将此更改传播到元素属性。
最佳答案
前几天我遇到了类似的问题,发现将观察者放在父元素上可以让我向上传播数据。这是一个简化版本:
Polymer({
is: 't-child',
properties: {
data: {
type: Object,
notify: true,
value: function() {
return {};
}
}
},
editData: function( newData ) {
this.set( 'data.name', newData.name );
},
});
和父元素:
<template>
<t-child data={{data}}></t-child>
</template>
<script>
Polymer({
is: 't-parent',
properties: {
data: Object
},
observers: [
'nameChange(data.name)'
],
nameChange: function( newName ) {
console.log( 'Name has been changed to: ', newName )
},
});
</script>
尽管如果您不确定将在该 data
对象上设置哪些属性,但我认为没有任何方法可以绕过深度监视。
关于Polymer:更改子属性时,this.set 不会更新父元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32648993/