Based on Web Components
document.registerElement('x-foo', {
prototype: Object.create(HTMLParagraphElement.prototype, {
firstMember: {
get: function() { return "foo"; },
enumerable: true,
configurable: true
},
// specify more members for your prototype.
// ...
}),
extends: 'p'
});
<body>
...
<x-foo></x-foo>
...
</body>
<link rel="import" href="/imports/heart.html">
<template>
<style>
:host {
background: #f8f8f8;
padding: 10px;
transition: all 400ms ease-in-out;
box-sizing: border-box;
border-radius: 5px;
width: 450px;
max-width: 100%;
}
:host(:hover) {
background: #ccc;
}
div {
position: relative;
}
header {
padding: 5px;
border-bottom: 1px solid #aaa;
}
h3 {
margin: 0 !important;
}
textarea {
font-family: inherit;
width: 100%;
height: 100px;
box-sizing: border-box;
border: 1px solid #aaa;
}
footer {
position: absolute;
bottom: 10px;
right: 5px;
}
</style>
<div>
<header>
<h3>Add a Comment</h3>
</header>
<content select="p"></content>
<textarea></textarea>
<footer>
<button>Post</button>
</footer>
</div>
</template>
<div id="host">
<p>Instructions go here</p>
</div>
<script>
var shadow = document.querySelector('#host').createShadowRoot();
shadow.appendChild(document.querySelector('template').content);
</script>
<button>Hello, world!</button>
<script>
var host = document.querySelector('button');
var root = host.createShadowRoot();
root.textContent = 'こんにちは、影の世界!';
</script>
Polymer 首先针对 Web Components 做了 polyfill,并将其进一步封装和增强,满足日常开发的习惯和需求。
<polymer-element name="custom-element">
<template>
<style>
:host {
...
}
</style>
<div>...</div>
</template>
<script>
(function() {
Polymer('custom-element', {
onMenuSelect: function () {
...
}
});
})();
</script>
</polymer-element>
5 mins to build an custom element ourselfs
encapsulation /inˌkæpsjuˈleiʃən/
AngularJS Directive 的标准化替代方案