riot.js 学習 [6] チャウダー 2

黄舟
黄舟オリジナル
2017-01-16 16:17:281274ブラウズ

構築方法

Riot はデフォルトで「カスタム タグ」を通じて DOM コンテンツを構築しますが、属性「riot-tag」を通じて DOM の構築にどの「カスタム タグ」を使用するかを指定することもできます。

例:

[code]    <div riot-tag="todo" title="da宗熊"></div>
    等同于:
    <todo title="da宗熊"></todo>

または、riot.mount でビルドされた要素を指定することもできます:

[code]<div id="content"></div>
<script>
    // 给id="content"的元素,构建todo的内容
    // 第一个参数,可以是dom元素,too
    riot.mount("#content", "todo");
</script>

Style

Riot カスタム タグでは、style タグを使用してコンポーネントのスタイルを記述することができます。 Riot はすべてのスタイル コンテンツを head タグに挿入するため、スタイルが繰り返し定義されることを心配する必要はありません。

[code]<!Doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <script type="text/javascript" src="riot.js"></script>
    <script type="text/javascript" src="compiler.js"></script>
</head>
<body>

    <todo></todo>
    <todo></todo>

</body>

<!-- 最前面一定要有空格或TAB -->
<script type="riot/tag">
    <todo>
        <label>da宗熊</label>
        <!-- 自定义样式 -->
        <style>
            label{color:#ccc;}
        </style>
    </todo>
</script>

<script type="text/javascript">
    riot.mount("todo");
</script>
</html>

最終的に生成されたもの:

riot.js 学習 [6] チャウダー 2

todoタグは2回呼び出されていますが、最終的に生成されたスタイルは1つだけです。

各ループ

ul や ol のようなリストを実装するには、ループが絶対に必要です。Riot には、「リストのような」コンテンツを生成するためのループに使用される各属性が組み込まれています [リストを走査するだけでなく、オブジェクト】。

[code]<!Doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <script type="text/javascript" src="riot.js"></script>
    <script type="text/javascript" src="compiler.js"></script>
</head>
<body>

    <todo></todo>

</body>

<!-- 最前面一定要有空格或TAB -->
<script type="riot/tag">
    <todo>
        <!-- 遍历列表 -->
        <ul each={ item in list }>
            <li>{ item }</li>
        </ul>
        <!-- 遍历对象 -->
        <ul each={ key,value in obj }>
            <li>{ key }:{ value }</li>
        </ul>
        // 列表内容
        this.list = [
            "内容1",
            "内容2",
            "内容3"
        ];
        // 对象内容
        this.obj = {
            name: "da宗熊",
            age: 26
        };
    </todo>
</script>

<script type="text/javascript">
    riot.mount("todo");
</script>
</html>

は次のように生成されます:

riot.js 学習 [6] チャウダー 2

リストの内容がオブジェクトの場合、Riotはクイックアクセスメソッドも提供します:

[code]<script type="riot/tag">
    <todo>
        <ul each={ list }>
            <!-- 这里的 context 已经是 list
 咧 -->
            <li>{ title }</li>
        </ul>
        // 列表内容
        this.list = [
            {title: "第一个"},
            {title: "第二个"}
        ];
    </todo>
</script>

結果は次のようになります:

riot.js 学習 [6] チャウダー 2

括弧式 [{ 式 } ] 内のコンテキスト [このオブジェクト] はラベルのコンテキストではなくなり、現在のトラバーサル オブジェクトの現在の項目になります。

各ループ内のラベルのコンテキストにアクセスする必要がある場合は、「parent」キーワードを通じてアクセスできます。

例:

[code]<script type="riot/tag">
    <todo>
        <ul each={ items }>
            <li>
                <span>{ title }</span>
                <a onclick={ parent.remove }>删除</a>
            </li>
        </ul>

        this.items = [{title: "da宗熊"}];
        remove(e){
            // 获取到当前点击, each循环中的item
            // 这里就是获取到了 {title: "da宗熊"} 这个对象
            var item = e.item;
            var index = this.items.indexOf(item);
            // 把当前项删掉
            // 数组的slice,push等操作,自带了this.update操作,SO,这里省了this.update调用
            this.items.splice(index, 1);
        }
    </todo>
</script>

イベント オブジェクトでは、event.item を通じて現在の各ループ内の現在のオブジェクトにアクセスできます。

上記は、riot.js 学習 [6] Chowder 2 の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。