编程语言
首页 > 编程语言> > javascript – Polymer 1.0绑定到未初始化对象的子属性

javascript – Polymer 1.0绑定到未初始化对象的子属性

作者:互联网

我想对未初始化的对象进行双向数据绑定.它看起来像这样:

主机element.html

<template>
  <profile-basics-editor profile="{{profile}}"></profile-basics-editor>
</template>

JS:

Polymer({
  is: 'profile-editor',
  properties: {
    profile: {
      type: Object,
      notify: true
    }
  }
});

儿童element.html

<template>
  <paper-input value="{{profile.nick}}"></paper-input>
  <paper-input value="{{profile.age}}"></paper-input>
</template>

JS:

properties: {
  profile:{
    type: Object,
    notify: true
  }
}

问题是当我更改输入值时,主机元素上的配置文件属性不会更新.但是,它在子元素内更新.但没有什么可以摆脱它.

我还尝试了在host元素中的路径绑定:

<profile-basics-editor 
   profile-nick="{{profile.nick}}" 
   profile-age="{{profile.age}}">
</profile-basics-editor>

儿童element.html

properties: {
  profileNick:{
    type: String,
    notify: true
  },
  profileAge:{
    type: Number,
    notify: true
  }
}

但结果相同.主机端没有更改配置文件.

最后,我在host元素中尝试了配置文件对象初始化:

profile: {
  type: Object,
  notify: true,
  value: function(){
    return {
      age: '',
      nick: ''
    };
  }
}

然后它奏效了.

因此,在第三次阅读文档后,我想知道它是否应该像这样工作.我的意思是,我真的需要在某个时刻初始化一个对象,这样数据绑定才能起作用吗?有没有办法做到与众不同?

只是为了解释,配置文件对象没有初始化,因为它是一个注册表单,所以没有任何数据要初始化.
如果我从数据存储区接收没有某些属性的配置文件数据会怎么样,因为用户之前没有填充它们并且API不会发送空属性.这意味着我需要检查此对象是否缺少属性.这不是一种JavaScript方式.

解决方法:

双向绑定对我来说也是一个很大的挑战.
在这种情况下,我试图通过勾画变化和事件的流程来帮助自己

case without initialisation
host               child              paper-input (age)
 |                  |                  |
profile=undefined  profile=undefined  value=undefined
                                      // typing
                                      value='v1'//->fire change event
                   //->receive change event
                   //set profile.age->no profile->done
case with initialisation
 |                  |                  |
profile=undefined  profile=undefined  value=undefined
//initialize with {age:''}
profile={age:''}
//->fire change
                   //->receive change
                   profile={age:''}
                   //->fire change
                                      //->receive change
                                      value=''
                                      //typing
                                      value='v1'//->fire change
                   //->receive change
                   profile.age='v1'

标签:javascript,data-binding,polymer-1-0,2-way-object-databinding
来源: https://codeday.me/bug/20190711/1434331.html