Polymer 聚合物2更新纸质列表框项目

Polymer 聚合物2更新纸质列表框项目,polymer,polymer-2.x,Polymer,Polymer 2.x,我有一组对象,这些对象具有名称属性。 为了编辑这些对象,我有一个纸质列表框,其中列出了对象的名称,并允许用户按名称选择其中一个对象。在列表框旁边,我有一个表单,其中包含纸张输入等,用于编辑选定对象的属性。其中一个纸张输入绑定到选定对象的name属性,以便用户可以更改名称 我的问题是,对name属性的更改没有反映到listbox中。在用户更改名称后,如何更新列表框 我确认名称更改确实发生了,因为当我更改到另一个对象并返回到前一个对象时,更改的名称仍然存在。 问题只是列表框没有更新 我试过这样的方法

我有一组对象,这些对象具有
名称
属性。 为了编辑这些对象,我有一个纸质列表框,其中列出了对象的名称,并允许用户按名称选择其中一个对象。在列表框旁边,我有一个表单,其中包含纸张输入等,用于编辑选定对象的属性。其中一个纸张输入绑定到选定对象的name属性,以便用户可以更改名称

我的问题是,对name属性的更改没有反映到listbox中。在用户更改名称后,如何更新列表框

我确认名称更改确实发生了,因为当我更改到另一个对象并返回到前一个对象时,更改的名称仍然存在。 问题只是列表框没有更新

我试过这样的方法:

this.notifyPath("myObjects")
但那没什么用

纸质列表框是这样创建的

<paper-listbox selected="{{selectedObjectIndex}}">
    <template is="dom-repeat" items="[[myObjects]]">
        <paper-item>[[item.name]]</paper-item>
    </template>
</paper-listbox>

下面是一些有效和无效的示例。(我试着在codepen演示代码,这里也是代码的一部分,以便快速检查

 <paper-listbox selected="{{selectedObjectIndex}}">
  <template is="dom-repeat" items="{{myObjects}}" >
    <paper-item>[[index]].[[item.name]]</paper-item> <br/>
  </template>
 </paper-listbox>
 <paper-input value="{{selectedObject.name}}" ></paper-input>

上面有符号的
不起作用
行改变了对象,但在
dom repeat
下面是一些工作和不工作的示例。(我试图在codepen演示代码,如图所示,这里也是部分代码,以便快速检查。)

 <paper-listbox selected="{{selectedObjectIndex}}">
  <template is="dom-repeat" items="{{myObjects}}" >
    <paper-item>[[index]].[[item.name]]</paper-item> <br/>
  </template>
 </paper-listbox>
 <paper-input value="{{selectedObject.name}}" ></paper-input>

上面的带符号的
行不起作用
行更改了对象,但在
dom repeat上不可见

您尝试过这个吗。notifyPath(myObjects.selectedObjectIndex.name)?@vals谢谢,确实有效,正确的语法应该是this.notifyPath(“myObjects.+this.selectedObjectIndex+.name”)。查看我对HakanCs答案的评论,了解最终解决方案。您是否尝试过此方法。notifyPath(myObjects.selectedObjectIndex.name)?@vals谢谢,这确实有效,正确的语法应该是this.notifyPath(“myObjects.”+this.selectedObjectIndex+“.name”)。有关最终解决方案,请参阅我对HakanCs答案的评论。感谢提供此详细示例并显示非工作片段。VAL的评论已经修复了此问题,但您的解决方案提供了摆脱我的“保存”按钮的可能性。当纸张输入绑定到“selectedObject.name”时,无需使用保存按钮因为您使用的“nameValueChanged”观察者允许我在键入时更新列表框,而且我也不需要在nameValueChanged中创建一个全新的对象实例。只需在nameValueChanged中调用this.notifyPath即可。良好的用户体验:-)感谢您提供了这个详细的示例并显示了非工作片段。VAL的注释已经修复了它,但您的解决方案提供了摆脱我的“保存”按钮的可能性。事实证明,当纸张输入绑定到“selectedObject.name”时,无需使用保存按钮,因为您使用的“nameValueChanged”然后,observer允许我在键入时更新列表框,我也不需要在nameValueChanged中创建全新的对象实例。只需在nameValueChanged中调用this.notifyPath即可。出色的用户体验:-)
     selectedObjectIndex:{
           type:Number,
           observer:'selectedPageIndexChanged'
         }
      }} 
      static get observers() {return ['nameValueChanged(selectedObject.name)']}
      constructor() {
            super();
       }

       ready() {
            super.ready();

        }

  selectedPageIndexChanged(newValue, oldValue) {

      this.selectedObject = this.myObjects[newValue];
  }
 nameValueChanged(name){
      //this.myObjects[this.selectedObjectIndex].name = name;
      //this.set('myObjects.' + this.selectedObjectIndex + ".name", name ) // --> Does not work
      this.set('myObjects.' + this.selectedObjectIndex, { name: name} ) // --> Works
      // this.splice('myObjects', this.selectedObjectIndex,1, this.selectedObject) -- Does not work

      //this.notifyPath('myObjects.' + this.selectedObjectIndex + ".name") // -- works (with one of above)

 }
}