DOM 在 Google Polymer 中编写脚本
DOM Scripting in Google Polymer
我刚刚完成了 Google Polymer 教程,并且正在构建我的第一个元素。而且我缺少一些我从 Prototype 和 jQuery 知道的 DOM 脚本函数,它们让我的生活变得非常轻松。但也许我的方法不对。这是我到目前为止所做的:
<polymer-element name="search-field">
<template>
<div id="searchField">
<ul id="searchCategories">
<li><a id="search-categories-text" data-target="text" on-click="{{categoryClick}}">Text</a></li>
<li><a id="search-categories-videos" data-target="videos" on-click="{{categoryClick}}">Videos</a></li>
<li><a id="search-categories-audio" data-target="audio" on-click="{{categoryClick}}">Audio</a></li>
</ul>
<div id="searchContainer">
<input id="searchText" type="text" />
<input id="searchVideos" type="text" />
<input id="searchAudio" type="text" />
</div>
</div>
</template>
<script>
Polymer({
ready: function() {
},
categoryClick: function(event, detail, sender) {
console.log(sender.dataset.target);
console.log(this.$.searchField.querySelector('#searchContainer input'));
this.this.$.searchField.querySelector('#searchContainer input');
}
});
</script>
</polymer-element>
我想要做的是在单击上述 link 之一时将活动的 class 设置到底部输入字段。在 jQuery 上,我只会观察 link 并停用所有输入字段并激活我想要的一个输入字段。但是我不确定如果没有 jQuery 怎么办。我可以将所有原生 javascript 函数与循环等一起使用,但是有什么聚合物可以提供让事情变得更容易的东西吗?
这个例子符合你的要求吗?
<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/polymer.js"></script>
<polymer-element name="search-field">
<template>
<style>
.hideMe {
display: none;
}
</style>
<div id="searchField">
<ul id="searchCategories">
<template repeat="{{category in searchCatergories}}">
<li><a on-click="{{categoryClick}}">{{category}}</a></li>
</template>
</ul>
<div id="searchContainer">
<template repeat="{{category in searchCatergories}}">
<div class="{{ { hideMe: category !== selectedCategory} | tokenList }}">
<label>Search for {{category}}</label>
<input id="search{{category}}" type="text">
</div>
</template>
</div>
</div>
</template>
<script>
Polymer({
searchCatergories: [
"Text",
"Video",
"Audio"
],
selectedCategory: 'Text',
categoryClick: function(event, detail, sender) {
// grab the "category" item from scope's model
var category = sender.templateInstance.model.category;
// update the selected category
this.selectedCategory = category;
// category
console.log("category", category);
// you can also access the list of registered element id's via this.$
// try Object.keys(this.$) to see registered element id's
// this will get the currently showing input ctrl
selectedInputCtrl = this.$["search" + category];
}
});
</script>
</polymer-element>
<search-field></search-field>
我为类别创建了一个数组并添加了两个重复模板。
我已经设置了一个 .hideMe class,它设置在所有不是当前选定类别的输入元素上。
动态信息 classes - https://www.polymer-project.org/docs/polymer/expressions.html#tokenlist
关于重复的信息 - https://www.polymer-project.org/docs/polymer/binding-types.html#iterative-templates
希望对您有所帮助
我刚刚完成了 Google Polymer 教程,并且正在构建我的第一个元素。而且我缺少一些我从 Prototype 和 jQuery 知道的 DOM 脚本函数,它们让我的生活变得非常轻松。但也许我的方法不对。这是我到目前为止所做的:
<polymer-element name="search-field">
<template>
<div id="searchField">
<ul id="searchCategories">
<li><a id="search-categories-text" data-target="text" on-click="{{categoryClick}}">Text</a></li>
<li><a id="search-categories-videos" data-target="videos" on-click="{{categoryClick}}">Videos</a></li>
<li><a id="search-categories-audio" data-target="audio" on-click="{{categoryClick}}">Audio</a></li>
</ul>
<div id="searchContainer">
<input id="searchText" type="text" />
<input id="searchVideos" type="text" />
<input id="searchAudio" type="text" />
</div>
</div>
</template>
<script>
Polymer({
ready: function() {
},
categoryClick: function(event, detail, sender) {
console.log(sender.dataset.target);
console.log(this.$.searchField.querySelector('#searchContainer input'));
this.this.$.searchField.querySelector('#searchContainer input');
}
});
</script>
</polymer-element>
我想要做的是在单击上述 link 之一时将活动的 class 设置到底部输入字段。在 jQuery 上,我只会观察 link 并停用所有输入字段并激活我想要的一个输入字段。但是我不确定如果没有 jQuery 怎么办。我可以将所有原生 javascript 函数与循环等一起使用,但是有什么聚合物可以提供让事情变得更容易的东西吗?
这个例子符合你的要求吗?
<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/platform.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/polymer/0.3.3/polymer.js"></script>
<polymer-element name="search-field">
<template>
<style>
.hideMe {
display: none;
}
</style>
<div id="searchField">
<ul id="searchCategories">
<template repeat="{{category in searchCatergories}}">
<li><a on-click="{{categoryClick}}">{{category}}</a></li>
</template>
</ul>
<div id="searchContainer">
<template repeat="{{category in searchCatergories}}">
<div class="{{ { hideMe: category !== selectedCategory} | tokenList }}">
<label>Search for {{category}}</label>
<input id="search{{category}}" type="text">
</div>
</template>
</div>
</div>
</template>
<script>
Polymer({
searchCatergories: [
"Text",
"Video",
"Audio"
],
selectedCategory: 'Text',
categoryClick: function(event, detail, sender) {
// grab the "category" item from scope's model
var category = sender.templateInstance.model.category;
// update the selected category
this.selectedCategory = category;
// category
console.log("category", category);
// you can also access the list of registered element id's via this.$
// try Object.keys(this.$) to see registered element id's
// this will get the currently showing input ctrl
selectedInputCtrl = this.$["search" + category];
}
});
</script>
</polymer-element>
<search-field></search-field>
我为类别创建了一个数组并添加了两个重复模板。 我已经设置了一个 .hideMe class,它设置在所有不是当前选定类别的输入元素上。
动态信息 classes - https://www.polymer-project.org/docs/polymer/expressions.html#tokenlist
关于重复的信息 - https://www.polymer-project.org/docs/polymer/binding-types.html#iterative-templates
希望对您有所帮助