Polymer:更改子属性时,this.set 不会更新父元素属性

标签 polymer

使用 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/

相关文章:

javascript - maven 在本地工作,但在使用 javascript 资源时在 jenkins 上失败

namespaces - Polymer组件不封装javascript

javascript - polymer 网络组件内容点击事件未触发

javascript - 如何从 npm 模块导入 css 文件 - webcomponent

javascript - 在 polymer View 中将参数传递给 js 函数

css - 核心页面内的 polymer 核心列表

html - 在 GitHub 上发布具有多个子组件的 Polymer 组件

polymer - 使用 Polymer 元素进行 html 导入的正确方法?

javascript - 从 Polymer 中的发送者获取数据值

javascript - 以编程方式更改YouTube上的上一个视频