这是代码片段,但我无法理解观察者方法是如何工作的
static get properties() {
return {
selected: {
type: Object,
observer: '_selectedChanged'
}
};
}
_selectedChanged(selected, oldSelected) {
if (oldSelected) oldSelected.removeAttribute('selected');
if (selected) selected.setAttribute('selected', '');
}
connectedCallback() {
super.connectedCallback();
this.selected = this.firstElementChild;
}
完整代码:https://codelabs.developers.google.com/codelabs/polymer-2-carousel/index.html?index=..%2F..%2Findex#3
什么是选择和旧选择,我们如何做oldSelected.removerAttribute? 这些对象是元素吗? 请详细说明!
selected
是元素的属性。它的值是一些 HTML 元素(在这种情况下,我认为它总是 img),因此,selected
属性中始终保存对 html 中某处img
的引用。当此属性更改时,将使用 2 个参数调用函数_selectedChanged
。第一个参数是当前保存在selected
中的新图像,第二个参数是旧图像(以前的值为selected
)。
在教程中,您可以进一步查看代码
const elem = this.selected.nextElementSibling;
if (elem) {
this.selected = elem;
}
其中显示const elem
采用一些 html 元素并将其放入this.selected
中。
因此,在函数_selectedChanged
中,他们从先前选择的旧图像中删除了html属性(因此它在屏幕上可见),并将新的html属性添加到现在应该在屏幕上可见的新图像中。
您可以想象,具有属性selected
的img
是当时屏幕上显示的唯一一个
我希望你能理解我的解释。我的英语不是100%,所以如果你有问题,问我,我可以尝试解释更多。
编辑
绑定和观察器的一些示例:
假设我们有一些paper-input
应该根据此输入的值显示一些结果(例如文章)。所以我们有一些 HTML:
<paper-input value="{{search}}" label="Find articles"></paper-input>
这是原始的。只是一些paper-input
,价值存储在search
财产中。内部脚本标记:
Polymer({
is: 'test-el',
properties: {
search: {
type: String,
observer: "_findResults"
},
articles: {
type: Array
}
},
_findResults() {
this.set("articles", ['firstArticle', 'secondArticle', Math.random()]);
},
});
解释:我们定义了属性search
和articles
。每当属性搜索发生变化时,它都会调用函数_findResults
(因为观察者)。函数_findResults只做一件事。this.set("articles")
几乎和this.articles =
一样。有关此内容的更多信息,请参阅文档。所以this.set("articles", ['firstArticle', 'secondArticle', Math.random()]);
意味着它创建数组并将其设置为articles
属性。现在,当我们有一些数组在每次用户在paper-input
中输入一些值时都会更改时,我们可以添加一些 HTML 来显示这些文章:
<template is="dom-repeat" items="{{articles}}" as="item">
[[item]] <br>
</template>
我也做了小提琴,所以你可以玩它并更多地理解它。 https://jsfiddle.net/2va41sy0/1/
您一开始的问题几乎相同,因为它们存储在对 HTML 对象而不仅仅是字符串的某些属性引用中。这也是关于理解javascript的一些基础知识,而不是聚合物
。