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)
}
}