Polymer 2.0:请解释 Observer 方法在这段代码中是如何工作的?
Polymer 2.0 :Please Explain the how the Observer method is working in this code?
这是代码片段,但我无法理解观察者方法的工作原理
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;
}
什么是selected和oldselected,怎么办oldSelected.removerAttribute?
这些对象是元素吗?
请详细说明!
selected
是元素的 属性。它的值是一些 HTML 元素(在这种情况下,我认为它总是 img )所以,在 selected
属性 中总是保存对 img
的引用 html.当此 属性 更改时,将使用 2 个参数调用函数 _selectedChanged
。第一个参数是当前保存在 selected
中的新图像,第二个参数是旧图像(selected
的先前值)。
在教程中您可以进一步查看代码
const elem = this.selected.nextElementSibling;
if (elem) {
this.selected = elem;
}
显示 const elem
需要一些 html 元素并将其放入 this.selected
.
因此在函数 _selectedChanged
中,他们从先前选择的旧图像中删除了 html 属性(因此它在屏幕上可见)并向新图像添加了新的 html 属性现在在屏幕上可见。
你可以想象img
属性selected
是当时唯一显示在屏幕上的
希望你能理解我的解释。我的英语不是 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 =
相同。有关更多信息,请参见 documentation。所以 this.set("articles", ['firstArticle', 'secondArticle', Math.random()]);
意味着它创建数组并将其设置为 articles
属性。现在,当我们有一些数组,每次用户在 paper-input
中输入一些值时,我们可以添加一些 HTML 来显示这些文章:
<template is="dom-repeat" items="{{articles}}" as="item">
[[item]] <br>
</template>
我也做了fiddle,大家可以玩玩,多了解一点。
https://jsfiddle.net/2va41sy0/1/
你一开始的问题几乎相同,区别在于它们存储在一些 属性 对 HTML 对象的引用中,而不仅仅是字符串。这也是关于了解 javascript 而不是聚合物
的一些基础知识
这是代码片段,但我无法理解观察者方法的工作原理
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;
}
什么是selected和oldselected,怎么办oldSelected.removerAttribute? 这些对象是元素吗? 请详细说明!
selected
是元素的 属性。它的值是一些 HTML 元素(在这种情况下,我认为它总是 img )所以,在 selected
属性 中总是保存对 img
的引用 html.当此 属性 更改时,将使用 2 个参数调用函数 _selectedChanged
。第一个参数是当前保存在 selected
中的新图像,第二个参数是旧图像(selected
的先前值)。
在教程中您可以进一步查看代码
const elem = this.selected.nextElementSibling;
if (elem) {
this.selected = elem;
}
显示 const elem
需要一些 html 元素并将其放入 this.selected
.
因此在函数 _selectedChanged
中,他们从先前选择的旧图像中删除了 html 属性(因此它在屏幕上可见)并向新图像添加了新的 html 属性现在在屏幕上可见。
你可以想象img
属性selected
是当时唯一显示在屏幕上的
希望你能理解我的解释。我的英语不是 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 =
相同。有关更多信息,请参见 documentation。所以 this.set("articles", ['firstArticle', 'secondArticle', Math.random()]);
意味着它创建数组并将其设置为 articles
属性。现在,当我们有一些数组,每次用户在 paper-input
中输入一些值时,我们可以添加一些 HTML 来显示这些文章:
<template is="dom-repeat" items="{{articles}}" as="item">
[[item]] <br>
</template>
我也做了fiddle,大家可以玩玩,多了解一点。 https://jsfiddle.net/2va41sy0/1/
你一开始的问题几乎相同,区别在于它们存储在一些 属性 对 HTML 对象的引用中,而不仅仅是字符串。这也是关于了解 javascript 而不是聚合物
的一些基础知识