ホームページ  >  記事  >  ウェブフロントエンド  >  riot.js 学習 [5] チャウダー 1

riot.js 学習 [5] チャウダー 1

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

クラスの略語

Riot は、クラス名を生成するための簡単な構文を提供します。例:

[code]<p class={ foo: true, bar: 0, baz: new Date(), zorro: &#39;a value&#39; }></p>

true 値のみが生成され、false 値は無視されます。生成された結果は次のとおりです:

[code]<p class="foo baz zorro"></p>

もちろん、適切な場所を見つければ、この機能を他の属性にも使用できます~

不正な例を教えてください:

[code]<h1 xxx={a: true, b: 1}></h1>

もちろん、生成されたものも不正です:

[code]<h1 xxx="a b"></h1>

ブラケットエスケープ

エスケープ後、「{」と「}」を出力できます。

[code]\{ 这里的表达式,将不会执行 \}

は出力します:

[code]{ 这里的表达式,将不会执行 }

カスタム括弧

次のように、値を読み取るための括弧を自由に定義できます:

[code]riot.settings.brackets = &#39;${ }&#39;
riot.settings.brackets = &#39;{{ }}&#39;

中央のスペースは式の値が配置される場所です

バインディングはエスケープされません HTML

Riot 式は HTML に加えてテキスト値にのみバインドできます。ただし、カスタム タグを使用して HTML コンテンツをバインドすることはできます。例:
[code]    <raw>
        <span></span>

        // 把这个标签的HTML,设为参数的content值
        this.root.innerHTML = opts.content;
    </raw>
上記のカスタム タグを使用すると、HTML コンテンツを他のタグに埋め込むことができます:
[code]    <todo>
        <p>
            这里有一些HTML的内容——
            <raw content="{ html }"></raw>
        </p>

        this.html = &#39;我叫:<strong>da宗熊</strong>&#39;;
    </todo>

todo タグが raw タグとともに埋め込まれていることがわかります。これはRiotにおいて非常に興味深いことです。

ネストされたHTML

Riotには、2e31c9da925543d6bcd942fd3a46db50という非常に重要なタグがあり、タグに埋め込まれたHTMLをタグ定義内で使用できます。

たとえば、タグ定義があります:


[code]    <my-tag>
        <!-- 这里使用了yield标签 -->
        <p>Hello <yield/></p>
        this.text = &#39;world&#39;
    </my-tag>
このように使用すると:

[code]    <my-tag>
        <!-- 这部分内容,会替换掉<yield />标签 -->
        <b>{ text }</b>
    </my-tag>

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

[code]<my-tag>
    <p>Hello <b>world</b></p>
</my-tag>

名前またはIDを持つ要素

如果自定义标签内,元素带有 id 或 name ,这些元素,会自动绑定到标签内容的 context 上,我们可以很简单的通过javascript,获取到这些元素进行操作:

[code]    <login>
        <form id="login" onsubmit={ submit }>
            <input name="username">
            <input name="password">
            <button name="submit">
        </form>

        // 上面的元素,已经绑定到this对象中了
        var form = this.login,
            username = this.username.value,
            password = this.password.value,
            button = this.submit

    </login>

当然咯,这些带有 name 或 id 的元素,也可以在标签的HTML内使用,例如:

[code]<div>{ username.value }</div>

事件处理

Riot标签的事件定义,可以通过简单的方式进行绑定:
[code]    <login>
        <form onsubmit={ submit }></form>

        // 表单的提交,会运行下面的submit方法
        submit(e) {

        }
    </login>
如果属性以“on”开头,例如: onclick, onsubmit, oninput等等,它们都接受一个函数,来处理对应的事件。

这种函数,甚至可以根据表达式的值,动态的进行绑定:
[code]<form onsubmit={ condition ? mA : mB}></form>
如果条件成立,onsubmit执行mA,否则执行mB。

在Roit中,绑定的所有事件处理的函数,它们的默认事件,都被自动取消掉,除非你绑定的元素,是checkbox或者radio。

这意味着, e.preventDefault() 已经替你自动执行了,因为我们经常那么干~,so,Riot已经帮我们自动取消了默认事件。

当然,我们可以在事件处理函数中,return true;来让默认事件正常触发。

Event对象

在所有的事件处理函数中,第一个参数,就是event对象。每个event对象,含有下面几个属性:

e.currentTarget 指向事件触发的那个元素

e.target 事件起源的元素,呃,跟e.currentTarget一样

e.which 键盘事件中的按键值【key code】

e.item 当前each循环中,元素绑定的this对象

以上就是riot.js学习【五】杂烩1的内容,更多相关内容请关注PHP中文网(www.php.cn)!



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