riot.js 学習 [8] オブザーバー

黄舟
リリース: 2017-01-16 16:22:20
オリジナル
1228 人が閲覧しました

Riot はカスタムタグ [コンポーネント] に基づいて開発されているためです。タグ内のプロパティとメソッドはすべてプライベートであり、外部からタグの内容にアクセスすることは困難です。

タグ内のコンテンツにアクセスしたい場合は、いくつかのありがたいメソッドがあります:

1. Window グローバル変数メソッド

[code]<script type="riot/tag">
    <todo>
        <h1>{ title }</h1>

        this.title = opts.title || "da宗熊";
        // window.TODO劫持现在的this对象
        window.TODO = this;
    </todo>
</script>
ログイン後にコピー

利点:

非常に暴力的でシンプル、window.TODO を通じてすべてのタグ コンテンツにアクセスできます。コンテンツ。

欠点:

ページに複数の同一のタグがある場合は適用されません

2. riot.mount

[code]<script type="riot/tag">
    <todo>
        <h1>{ title }</h1>

        this.title = opts.title || "da宗熊";
    </todo>
</script>
<script>
    // 这个todo,返回的是个数组!!!
    var todo = riot.mount("todo");
    // todo = [tag];
</script>
ログイン後にコピー
riot.mount の戻り値は、最初の「todo」タグの内容を取得するために必要です。 : var todo1 = todo[0];

利点:

複数のラベルを区別する方法があります

欠点:

カスタムラベルが配置される順序に大きく依存します。また、スクリプトの src を通じてロードバックされたカスタム タグの戻り値は null です。

手動でロードメソッドを呼び出してコンパイルすることによってのみ、コンテキストにアクセスできます:
[code]riot.compile("todo.tag", function(){ 
    /*才能获取到返回的内容*/
    var todo = riot.mount("todo")[0];
});
ログイン後にコピー

riot.observable

Riot では、単純なパブリッシャーを使用するだけで済みます。 jQuery のようなパブリッシャーを作成できます:

[code]var opts = riot.observable({
    // some code...
});
ログイン後にコピー

riot.observable によって生成されたパブリッシャーには、on、off、trigger、one などの一般的なメソッドがあります [jq に詳しい学生は、これを見れば何が起こっているかわかるはずです。名前]。

opts を例として、各メソッドの簡単な説明を示します:

[code]// 监听事件
opts.on("event1", function(data1, data2){
    // 监听event1事件
    // data1和data2是trigger传入的参数
    // data1 = 1, data2 = 2
    console.log(data1, data2);
});

// 发布一个事件
// 该事件带有 1和2 作为参数
// 上面的on("event1")的回调fn将会执行
opts.trigger("event1", 1, 2);

// 解除event1 的所有监听,第二个参数可选
// 如果有第二个参数[function],则只解绑该函数
opts.off("event1");

// one与on类似,只是one如果执行过一次,就自动解除绑定
opts.one("event1", function(data1){
    console.log(data1);
});
opts.trigger("event1", 1, 2);
ログイン後にコピー

最終的な出力は次のようになります:

[code]1 2
1
ログイン後にコピー

Riot は、内部および外部の通信問題を解決するために opts と observable を使用することを推奨します。例を見てみましょう:

[code]<!Doctype html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Riot.js 事件监听</title>
    <script type="text/javascript" src="riot.js"></script>
    <script type="text/javascript" src="compiler.js"></script>
</head>
<body>
    <todo></todo>
</body>
<script type="riot/tag">
    <todo>
        <a href="javascript:;" onclick={ opts.login }>登录</a>

        opts.on("outside", function(value){
            console.log("outside value:" + value);
        });
    </todo>
</script>
<script type="text/javascript">
var opts = riot.observable({
    login: function(params){
        // 这里的this被todo更改了..
        opts.trigger("outside", "登录成功...");
    }
});
riot.mount("todo", opts);

</script>
</html>
ログイン後にコピー

クリックしてログインすると、次のような効果が得られます:

riot.js 学習 [8] オブザーバー

イベントの監視と公開を通じて、社内および社外のコミュニケーションの問題に適切に対処することができます。データへのアクセス権を特定の側面で大幅に制限することもできます。

ただし、opt は主にタグに関連付けられています。

タグは、opts が「外部」に公開してリッスンすることを認識する必要があります。

opts は、タグがログイン メソッドを呼び出すことを認識する必要があります。

適切なチーム規範がなければ、これは大惨事になります。

SO:

どのモードや方法であっても、独自の適用可能なシナリオがあります。正しく使えばとどめを刺すことになるし、間違って使えば一歩も達成することが困難になる。行動を起こす前にもっと考えてください

上記は riot.js 学習 [8] Observer の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート