聚合物与多个组件实例不一致的数据
Polymer Inconsistent data with multiple component instances
我正在使用 mp-slider(聚合物 2.0)但需要标题为 link。我添加了 属性 sliderLink(如下所示) 除了所有实例的 URL 值是最后一个实例的值外,一切似乎都在工作。例如,如果我的 links 是 google.com/1 google.com/2 yahoo.com/1 所有的 links幻灯片是雅虎。com/1
为了解决这个问题,我添加了值:function() { return [];我尝试了几个版本的语法,但结果没有任何变化。
对我来说奇怪的是 属性 的三种用途,一个实例具有正确的值,而另外两个则没有。
<link rel="import" href="../polymer/polymer.html">
<dom-module id="mp-caption">
<template>
<style>
#caption {
width: 100%;
background: var(--caption-background);
padding: 5px 20px;
position: absolute;
bottom: 0;
box-sizing: border-box;
transition: all 2s linear;
}
#caption h3, #caption p { color: var(--white-color) }
#caption h3 {
font-size: 20px;
margin: 10px 0;
padding: 0
}
#caption p {
font-size: 14px;
margin: 5px;
padding: 5px 0
}
</style>
<template is="dom-if" if="{{sliderLink}}">
<div id="caption">
<h3><a href={{sliderLink}}>{{sliderHeader}}</a></h3><!-- incorrect value for sliderLink here -->
<p><a href={{sliderLink}}>{{sliderContent}}</a></p><!-- incorrect value for sliderLink here -->
<p>{{sliderLink}}</p> <!-- correct value for sliderLink here -->
</div>
</template>
<template is="dom-if" if="{{!sliderLink}}">
<div id="caption">
<h3>{{sliderHeader}}</h3>
<p>{{sliderContent}}</p>
</div>
</template>
</template>
<script>
class mpCaption extends Polymer.Element {
static get is() {
return 'mp-caption'
}
static get properties() {
return {
sliderHeader: String,
sliderContent: String,
sliderLink: {String, value: function() { return []; }},
}
}
}
customElements.define(mpCaption.is, mpCaption);
</script>
</dom-module>
这三种用法的唯一区别是最后一种不是 linked。这是一个错误,还是我缺少制作这些属性 URL 所需的东西?
谢谢
尝试绑定到 href 属性而不是 属性:
<a href$={{sliderLink}}>
有关详细信息,请参阅 Polymer docs on binding to native HTML elements。
正如 Kate Jeffreys 告诉您的那样,您应该使用 属性绑定:
<a href$="{{sliderLink}}"></a>
我不知道你是如何传递每个值的 属性 但你的例子没有任何问题。
我不得不删除 position: absolute 这样我就可以看到每个标题而不是一个放在另一个上面。
我更改的另一件事是 属性 sliderLink,您返回了一个空数组,但在 属性 类型的字符串中没有意义。
这里可以看到代码:mp-caption code
在这里您可以查看演示:mp-caption demo
我正在使用 mp-slider(聚合物 2.0)但需要标题为 link。我添加了 属性 sliderLink(如下所示) 除了所有实例的 URL 值是最后一个实例的值外,一切似乎都在工作。例如,如果我的 links 是 google.com/1 google.com/2 yahoo.com/1 所有的 links幻灯片是雅虎。com/1
为了解决这个问题,我添加了值:function() { return [];我尝试了几个版本的语法,但结果没有任何变化。
对我来说奇怪的是 属性 的三种用途,一个实例具有正确的值,而另外两个则没有。
<link rel="import" href="../polymer/polymer.html">
<dom-module id="mp-caption">
<template>
<style>
#caption {
width: 100%;
background: var(--caption-background);
padding: 5px 20px;
position: absolute;
bottom: 0;
box-sizing: border-box;
transition: all 2s linear;
}
#caption h3, #caption p { color: var(--white-color) }
#caption h3 {
font-size: 20px;
margin: 10px 0;
padding: 0
}
#caption p {
font-size: 14px;
margin: 5px;
padding: 5px 0
}
</style>
<template is="dom-if" if="{{sliderLink}}">
<div id="caption">
<h3><a href={{sliderLink}}>{{sliderHeader}}</a></h3><!-- incorrect value for sliderLink here -->
<p><a href={{sliderLink}}>{{sliderContent}}</a></p><!-- incorrect value for sliderLink here -->
<p>{{sliderLink}}</p> <!-- correct value for sliderLink here -->
</div>
</template>
<template is="dom-if" if="{{!sliderLink}}">
<div id="caption">
<h3>{{sliderHeader}}</h3>
<p>{{sliderContent}}</p>
</div>
</template>
</template>
<script>
class mpCaption extends Polymer.Element {
static get is() {
return 'mp-caption'
}
static get properties() {
return {
sliderHeader: String,
sliderContent: String,
sliderLink: {String, value: function() { return []; }},
}
}
}
customElements.define(mpCaption.is, mpCaption);
</script>
</dom-module>
这三种用法的唯一区别是最后一种不是 linked。这是一个错误,还是我缺少制作这些属性 URL 所需的东西?
谢谢
尝试绑定到 href 属性而不是 属性:
<a href$={{sliderLink}}>
有关详细信息,请参阅 Polymer docs on binding to native HTML elements。
正如 Kate Jeffreys 告诉您的那样,您应该使用 属性绑定:
<a href$="{{sliderLink}}"></a>
我不知道你是如何传递每个值的 属性 但你的例子没有任何问题。
我不得不删除 position: absolute 这样我就可以看到每个标题而不是一个放在另一个上面。
我更改的另一件事是 属性 sliderLink,您返回了一个空数组,但在 属性 类型的字符串中没有意义。
这里可以看到代码:mp-caption code
在这里您可以查看演示:mp-caption demo