blob: 9748cfa09caa588acbcaa884e737749856857320 [file] [log] [blame] [view]
SkyElement
===
SkyElement is the framework for creating...yup...Sky Elements. It take heavy
inspriation from [Polymer](www.polymer-project.org) and isn't very fully
featured...yet
Declaring an element
--------
```HTML
<import src="../path/to/sky-element.sky" as="SkyElement" />
<template>
<my-other-element>Hello, {{ place }}</my-other-element>
</template>
<script>
// SkyElement takes a single object as it's only parameter
SkyElement({
name: 'my-element', // required. The element's tag-name
attached: function() {
this.place = 'World';
}, // optional
detached: function() {}, // optional
attributeChanged: function(attrName, newValue, oldValue) {} // optional
});
</script>
```
Note that an element's declared ShadowDOM is the previous `<template>`
element to the `<script>` element which defines the element.
Databinding
--------
SkyElement's databinding support is derived from Polymer's. At the moment,
there are some key differences:
There is not yet support for
* Declarative event handlers
* Inline expressions
* Self-observation (e.g. `fooChanged()` gets invoked when `this.foo` is changed)
* Computed properties (e.g. the computed block)
* Conditional attributes (e.g. `<my-foo checked?="{{ val }}"`)
Also, because there are so few built-in elements in Sky, the default behavior
of HTMLElement with bindings is to assign to the property. e.g.
```HTML
<my-foo bar="{{ bas }}">
```
Will not `setAttribute` on the `my-foo`, instead it will assign to the `bar`
property of `my-foo`. There are two exceptions to this: `class` & `style` --
those still`setAttribute`.