Polymer 具有其他属性的类型对象的聚合索引属性
我有一个自定义元素,Polymer 具有其他属性的类型对象的聚合索引属性,polymer,polymer-1.0,Polymer,Polymer 1.0,我有一个自定义元素,x-custom,它有一个属性,object,这是一个对象 我还有另一个属性,name,我想用它来索引对象,将来自其他自定义元素的数据放在对象的特定属性下 最终目标如下: <other-custom-element data="{{object.{{name}}}}"></other-custom-element> ... name: { type: String, }, object: { type: Object, value: {
x-custom
,它有一个属性,object
,这是一个对象
我还有另一个属性,name
,我想用它来索引对象
,将来自其他自定义元素的数据放在对象
的特定属性下
最终目标如下:
<other-custom-element data="{{object.{{name}}}}"></other-custom-element>
...
name: {
type: String,
},
object: {
type: Object,
value: {}
}
我试图通过\u resolveRef()
基本上传递对alldata
的特定元素的引用,但我认为可能存在范围问题。我得到以下错误(例如,如果location
等于“some_location”):
因此,出于某种原因,它似乎不知道“alldata”,即使它是自定义元素的属性。希望这足以让一位聚合物能手帮上忙:)
编辑2:
一些示例数据可以使最终目标更加明确
假设位置是由以下字符串组成的数组:
locations: {
type: Array,
value: ['location1', 'location2']
}
并假设
元素为每个单独的位置返回以下数据:
<get-data-at-location
location=[[location]] //'location1'
data={{}}> //[{value: 4, time: 0}, {value: 5, time: 1}]
</get-data-at-location>
<get-data-at-location
location=[[location]] //'location2'
data={{}}> //[{value: 10, time: 1}, {value: 11, time: 2}]
</get-data-at-location>
因此,我希望对象alldata
在dom的所有实例之间共享,以便它们都可以将数据放入整个对象各自的属性(即位置的字符串值)中
编辑3:
尝试了一些新的东西。我没有使用\u resolveRef(location)
作为返回指向
应该存储它获取的数据的位置的指针的方法,而是使用了以下语法:{{{alldata[location]}
,虽然效果更好,但仍然不完美
<template is="dom-repeat" items="[[locations]]" as="location">
<get-data-at-location
location="[[location]]"
data="{{alldata[location]}}">
</get-data-at-location>
<h5>Data at location: [[location]]</h5>
<template is="dom-repeat" items="{{alldata[location]}}" as="data">
<p>Data: {{data.value}}</p>
<p>Time: {{data.time}}</p>
</template>
</template>
...
alldata: {
type: Object
value: {}
}
只是漂亮地打印提供的对象,在本例中,它只打印空括号{}
。因此,比较接近(有点接近),但仍然不太接近。您可以创建一个函数来接收名称并返回您想要使用的值。@Alon,谢谢您的评论。这看起来像是
..吗。。。?应该用大括号括起来吗?{{{u resolveObjectRef(name)}}只是一个提示,您可能不想使用value:{}
,因为这个对象将在您元素的所有实例中共享。如果元素的每个实例的默认值都应该有一个不同的对象,那么您需要这样:value:function(){return{};}
另外,为了解决基本的调试问题,您是否100%肯定在这个dom重复运行时将alldata定义为一个值?您是否从可能将其设置为未定义的源获取该数据?
<get-data-at-location
location=[[location]] //'location1'
data={{}}> //[{value: 4, time: 0}, {value: 5, time: 1}]
</get-data-at-location>
<get-data-at-location
location=[[location]] //'location2'
data={{}}> //[{value: 10, time: 1}, {value: 11, time: 2}]
</get-data-at-location>
alldata: {
location1: [{value: 4, time: 0}, {value: 5, time: 1}],
location2: [{value: 10, time: 1}, {value: 11, time: 2}]
}
<template is="dom-repeat" items="[[locations]]" as="location">
<get-data-at-location
location="[[location]]"
data="{{alldata[location]}}">
</get-data-at-location>
<h5>Data at location: [[location]]</h5>
<template is="dom-repeat" items="{{alldata[location]}}" as="data">
<p>Data: {{data.value}}</p>
<p>Time: {{data.time}}</p>
</template>
</template>
...
alldata: {
type: Object
value: {}
}
<x-custom alldata={{allData}}></x-custom>
<x-pretty-json object={{allData}}></x-pretty-json>