polymer 1.0 dom重复过滤器仅运行一次
当我使用下拉列表更改年份时,我希望列表重新筛选并显示所选年份的信息。我错过了什么?更改年份不会重新筛选dom重复polymer 1.0 dom重复过滤器仅运行一次,polymer,Polymer,当我使用下拉列表更改年份时,我希望列表重新筛选并显示所选年份的信息。我错过了什么?更改年份不会重新筛选dom重复 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <base href="http://polygit.org/components/"> <script src="webcomponentsjs/webcomponents-lite.min.js"&
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<base href="http://polygit.org/components/">
<script src="webcomponentsjs/webcomponents-lite.min.js"></script>
<link href="polymer/polymer.html" rel="import">
<title>dropdown</title>
<link rel="import" href="http://polygit.org/components/paper-menu/paper-menu.html">
<link rel="import" href="http://polygit.org/components/paper-item/paper-item.html">
<link rel="import" href="http://polygit.org/components/paper-button/paper-button.html">
<link rel="import" href="http://polygit.org/components/paper-menu-button/paper-menu-button.html">
<style>
.taller{
height:120px;
}
[vertical-align="top"] ul {
margin-top: 0;
}
[vertical-align="bottom"] ul {
margin-bottom: 0;
}
button, paper-button {
border: 1px solid #ccc;
background-color: #eee;
/*padding: 1em;*/
border-radius: 3px;
cursor: pointer;
}
button:focus {
outline: none;
border-color: blue;
}
</style>
</head>
<body>
<dom-module id="x-demo">
<template>
<div class="horizontal-section flex layout horizontal taller">
<paper-menu-button>
<paper-button icon="menu" class="dropdown-trigger"><span>Year<br/></span><span>{{year}}</span></paper-button>
<paper-menu id="selectedYear" class="dropdown-content" selected="{{selectedIndex}}">
<template is="dom-repeat" items="{{allData}}">
<paper-item on-tap='yearTapped'>{{item.year}}</paper-item>
</template>
</paper-menu>
</paper-menu-button>
<paper-menu-button>
<paper-button icon="menu" class="dropdown-trigger"><span>Make<br/></span><span>{{make}}</span></paper-button>
<paper-menu id="selectedMake" class="dropdown-content" selected="{{selectedIndex}}">
<template is="dom-repeat" items="{{allData}}">
<paper-item on-tap='makeTapped'>{{item.make}}</paper-item>
</template>
</paper-menu>
</paper-menu-button>
<paper-menu-button>
<paper-button icon="menu" class="dropdown-trigger"><span>Model<br/></span><span>{{model}}</span></paper-button>
<paper-menu id="selectedModel" class="dropdown-content" selected="{{selectedIndex}}">
<template is="dom-repeat" items="{{allData}}">
<paper-item on-tap='modelTapped'>{{item.model}}</paper-item>
</template>
</paper-menu>
</paper-menu-button>
<paper-menu-button>
<paper-button icon="menu" class="dropdown-trigger"><span>Engine<br/></span><span>{{engine}}</span></paper-button>
<paper-menu id="selectedEngine" class="dropdown-content" selected="{{selectedIndex}}">
<template is="dom-repeat" items="{{allData}}">
<paper-item on-tap='engineTapped'>{{item.engine}}</paper-item>
</template>
</paper-menu>
</paper-menu-button>
</div>
<div>Vehicle list filtered by selected year: </div>
<template is="dom-repeat" id="vehicleList" items="{{allData}}" filter="yearMatch" observe="year item.year">
<div>Year <span>{{item.year}}</span></div>
<div>Make <span>{{item.make}}</span></div>
<div>Model <span>{{item.model}}</span></div>
<div>Engine <span>{{item.engine}}</span></div>
<button on-click="toggleSelection">Select</button>
</template>
<array-selector id="selector" items="{{allData}}" selected="{{selected}}" multi toggle></array-selector>
<div>Selected vehicle: </div>
<template is="dom-repeat" items="{{selected}}">
<div><span>{{item.year}}</span></div>
<div><span>{{item.make}}</span></div>
<div><span>{{item.model}}</span></div>
<div><span>{{item.engine}}</span></div>
</template>
</template>
<script>
Polymer({
is: 'x-demo',
properties:{
allData:{type:Array,
value: function() {
return [{year:'2015',make:'HONDA',model:'CB300F',engine:'300cc'},
{year:'2014',make:'HONDA',model:'CBR300R',engine:'300cc'}];
}
},
year:{type:String,value:'2014',notify:true}
},
observers: [
'yearChanged(year)'
],
yearChanged: function(item) {
console.log(item);
this.set('item.year', item);
this.$.vehicleList.render();
},
yearMatch: function(item) {
console.log('year checked');
return item.year = this.year;
},
toggleSelection: function(e) {
var item = this.$.vehicleList.itemForElement(e.target);
this.$.selector.select(item);
},
yearTapped: function(e) {
this.year=e.target.innerText;
},
makeTapped: function(e) {
this.make=e.target.innerText;
},
modelTapped: function(e) {
this.model=e.target.innerText;
},
engineTapped: function(e) {
this.engine=e.target.innerText;
}
});
</script>
</dom-module>
<x-demo></x-demo>
</body>
</html>
下拉列表
.更高{
高度:120px;
}
[vertical align=“top”]ul{
边际上限:0;
}
[vertical align=“bottom”]ul{
页边距底部:0;
}
按钮,纸按钮{
边框:1px实心#ccc;
背景色:#eee;
/*填充:1em*/
边界半径:3px;
光标:指针;
}
按钮:焦点{
大纲:无;
边框颜色:蓝色;
}
年份
{{Year}
{{item.year}
Make
{{Make}
{{item.make}
模型
{{Model}
{{item.model}
引擎
{{Engine}
{{item.engine}
按所选年份筛选的车辆列表:
年份{{item.Year}
Make{{item.Make}
模型{{item.Model}
引擎{{item.Engine}
挑选
所选车辆:
{{item.year}
{{item.make}
{{item.model}
{{item.engine}
聚合物({
是:“x-demo”,
特性:{
allData:{type:数组,
值:函数(){
返回[{年份:'2015',品牌:'HONDA',型号:'CB300F',发动机:'300cc'},
{年份:'2014',品牌:'HONDA',型号:'CBR300R',发动机:'300cc'}];
}
},
年份:{type:String,值:'2014',notify:true}
},
观察员:[
'年更改(年)'
],
年份:职能(项目){
控制台日志(项目);
此.set('item.year',item);
此.$.vehicleList.render();
},
年份匹配:功能(项目){
console.log(“检查年份”);
return item.year=this.year;
},
切换选择:功能(e){
var项目=此.$.vehicleList.itemForElement(e.target);
此.$.selector.select(项);
},
年份:功能(e){
this.year=e.target.innerText;
},
makeTapped:函数(e){
this.make=e.target.innerText;
},
模型:功能(e){
this.model=e.target.innerText;
},
引擎配置:功能(e){
this.engine=e.target.innerText;
}
});
这对我很有用
<script>
HTMLImports.whenReady(function () {
Polymer({
is: 'x-demo',
properties:{
allData:{
type:Array,
value: [{
year:'2015',
make:'HONDA',
model:'CB300F',
engine:'300cc'
}, {
year:'2014',
make:'HONDA',
model:'CBR300R',
engine:'300cc'
}]
},
year:{
type:
String,
value:'2014',
observer: 'yearChanged'
}
},
yearChanged: function() {
console.log(this.year)
this.$.vehicleList.render();
},
yearMatch: function(item) {
return item.year == this.year;
},
toggleSelection: function(e) {
var item = this.$.vehicleList.itemForElement(e.target);
this.$.selector.select(item);
},
yearTapped: function(event) {
var res = event.target.innerText || event.target.textContent;
this.year = res.replace(/\s+/g, '');
},
makeTapped: function(event) {
var res = event.target.innerText || event.target.textContent;
this.make = res.replace(/\s+/g, '');
},
modelTapped: function(event) {
var res = event.target.innerText || event.target.textContent;
this.model = res.replace(/\s+/g, '');
},
engineTapped: function(event) {
var res = event.target.innerText || event.target.textContent;
this.engine = res.replace(/\s+/g, '');
}
});
});
HTMLImports.whenReady(函数(){
聚合物({
是:“x-demo”,
特性:{
所有数据:{
类型:数组,
价值:[{
年份:“2015年”,
品牌:'本田',
型号:'CB300F',
发动机:300毫升
}, {
年份:'2014',
品牌:'本田',
型号:'CBR300R',
发动机:300毫升
}]
},
年份:{
类型:
一串
价值:'2014',
观察家:"年变"
}
},
年份更改:函数(){
console.log(今年)
此.$.vehicleList.render();
},
年份匹配:功能(项目){
返回项.year==本.year;
},
切换选择:功能(e){
var项目=此.$.vehicleList.itemForElement(e.target);
此.$.selector.select(项);
},
年份:功能(事件){
var res=event.target.innerText | | event.target.textContent;
this.year=res.replace(/\s+/g');
},
makeTapped:函数(事件){
var res=event.target.innerText | | event.target.textContent;
this.make=res.replace(/\s+/g',);
},
模型:功能(事件){
var res=event.target.innerText | | event.target.textContent;
this.model=res.replace(/\s+/g',);
},
EngineTaped:函数(事件){
var res=event.target.innerText | | event.target.textContent;
this.engine=res.replace(/\s+/g');
}
});
});
jsbin有一个小故障,下拉列表不可见,但仍然可以单击。我有类似的问题,但这只是因为我的代码中没有“this.$.vehicleList.render();”。谢谢你的代码!谢谢我所需要的是一个双等号而不是一个:returnitem.year==this.year;但是别忘了firefox不知道innerText属性并返回undefined