入门使用文档

从这里开始你可以一步步的了解,如何通过Rosetta提供的接口

定义element

定义一个element,需要定义三个部分

Step one

这三个部分用标签<element></element>包裹

定义一个名为'r-slider'的element的示例:

<element name="r-slider">


</element>

Step two

增加html、变量、属性

<template></template>包裹html的内容

<element name="r-slider">
    <template>
    </template>
</element>
<element name="r-slider">
    <template>
        <div>
            我是DOM结构示例
        </div>
    </template>
</element>
<element name="r-slider">
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>{text}</span>
    </template>
</element>
<element name="r-slider">
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>{text}</span>
        <span>{title}</span>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            properties: {
                text: 'text'
            },
            title: '我是一个作用域内的变量'
        });

    </script>
</element>

Step three

设置样式

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div>
            我是DOM结构示例
        </div>
    </template>
</element>

Step four

注册element定义逻辑

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>
            {title}
        </span>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            title: '我是一个测试title'
        });
    </script>
</element>

绑定事件

Rosetta为element内部DOM提供事件绑定方式,以'on'加首字母大写的事件名为attribute名,以{xxx}定义callback,如下示例:

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>
            {title}
        </span>
        <div onClick={clicked}>
        </div>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            clicked: function () {
                alert('clicked');
            }
        });
    </script>
</element>

生命周期

Rosetta为custom elements实现了和标准一致的生命周期:

element定义的时候可以绑定生命周期的事件

组件初始化的生命周期顺序

提供定义生命周期callback的两种形式

示例如下,分别用两种方式声明attachedcreated

<element name="r-slider" onAttached={attached}>
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>
            {title}
        </span>
        <div onClick={clicked}>
        </div>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            attached: function () {
                alert('attached');
            },
            created: function() {
                alert('created');
            },
            clicked: function() {
                alert('clicked');
            }
        });
    </script>
</element>

声明依赖

Rosetta在使用custom element时,使用HTML Import声明依赖,如下示例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="import" type="text/html" href="r-slider.html">
</head>
<body>

    <r-slider></r-slider>
</body>
</html>

更新element的属性

定义element,绑定事件、实现属性更新逻辑

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div>
            我是DOM结构示例
        </div>
        <span>
            {title}
        </span>
        <div onClick={clicked}>
            {text}
        </div>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            properties: {
                text: {
                    type: String,
                    value: 'init'
                }
            },
            clicked: function() {
                this.update({
                    text: 'clicked!'
                })
            }
        });
    </script>
</element>

使用element,在使用处用HTML Import声明依赖

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="import" type="text/html" href="r-slider.html">
</head>
<body>

    <r-slider text="我是一个属性测试"></r-slider>
</body>
</html>

refs快速访问内部DOM

通过tag的refs属性快速访问DOM,作为对dom查询接口的补充,返回值为DOM对象

示例如下:

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <div ref='test'>
            我是refDOM选择示例
        </div>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider',
            attached: function() {
                var test = this.$['test'];
                test.innerHTML += '更新啦';
            }
        })
    </script>
</element>

定义容器

示例如下:

定义content

<element name="r-slider">
    <style>
        :host div {
            color: red;
        }
    </style>
    <template>
        <content select='.aaa'>
        </content>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-slider'
        })
    </script>
</element>

使用element,传入子元素

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="import" type="text/html" href="r-slider.html">
</head>
<body>
    <r-slider text="我是一个属性测试">
        <div class="aaa">
            我会被选择加入容器
        </div>
        <div>
            我会被忽略
        </div>
    </r-slider>
</body>
</html>

嵌套使用element

在定义elementA的时候使用已经定义好的elementB,是这里说的"嵌套使用element" 按照以下步骤嵌套使用element

示例如下:

<element name="r-a">
    <style>
        :host div {
            color: red;
        }
    </style>
    <link rel="import" type="text/html" href="r-b.html">
    <template>
        <content select='.aaa'>
        </content>
        <r-b></r-b>
    </template>
    <script type="text/javascript">
        Rosetta({
            is: 'r-a'
        });
    </script>
</element>

ready接口

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="import" type="text/html" href="r-slider.html">
</head>
<body>
    <r-slider text="我是一个属性测试">
        <div class="aaa">
            我会被选择加入容器
        </div>
        <div>
            我会被忽略
        </div>
    </r-slider>

    <script type="text/javascript">
        Rosetta.ready(function() {
            //you can access element instance and do something here
        });
    </script>
</body>
</html>

ref接口快速element实例

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="import" type="text/html" href="r-slider.html">
</head>
<body>
    <r-slider text="我是一个属性测试" ref="lalala">
        <div class="aaa">
            我会被选择加入容器
        </div>
        <div>
            我会被忽略
        </div>
    </r-slider>

    <script type="text/javascript">
        Rosetta.ready(function() {
            //you can access element instance and do something here

            var slider = Rosetta.ref('lalala');
        });
    </script>
</body>
</html>

init接口

Rosetta提供init接口,内部调用,进行页面自定义tag的解析

    Rosetta.init()

基于FIS3的预处理

示例配置如下:

fis
    .match('*.{html,tpl}', {
        parser: fis.plugin('rosetta', {
            compileUsage: false
        })
    })

    .match('/elements/r-*.html', {
        rExt: '.js'
    })
    .match('/elements/*.*', {
        release: '/static/$0'
    })
    .match('::packager', {
        postpackager: fis.plugin('rosetta', {
            allInOne: true
        })
    });

详细配置参考脚手架中的具体项目示例

发现了问题或想要贡献?来 Github 和Rosetta联系或者Fork吧!: /docs/lv1.md