イベントとメッセージの仕組みの理解


メッセージ/イベントのメカニズムはほとんどの開発言語にある仕組みで、deviceoneの独創ではなく、ある言語ではニュースと呼ばれ、あるところではMessageと呼ばれています.原理は似ていますが、実現の方法はちょっと複雑です.私達のdeviceoneは統一してニュースを呼びます.
メッセージの基本概念
また、初心者の中にはこの仕組みに慣れていない人もいますので、まずは基本概念を簡単に紹介します.1つ/複数のメッセージは、次のいくつかの基本的な部分を含むデータ構造であると理解できる. : , : , メッセージは種類別に2つに分けられます. deviceone , 。 : , , , 。例を挙げて説明します.例えば、ユーザーがdouをクリックします.Buttonボタンを押すと、システムメッセージが起動します.3つの部分が含まれています.button touch例えばユーザーがドウを通すButtonボタンはカスタムイベントをトリガします.3つの部分を含みます. : button : , aaabbbccc 公開/購読モード
リリース/購読モードは最も一般的な設計モードの一つであり、メッセージメカニズムの核心であり、その特徴は結合度を低くし、2つの独立したオブジェクトが互いに依存しないようにすることである.簡単に紹介してください.おなじみの学生はスキップできます.まず現実的な簡単な例からこの問題を説明します.
この図から私たちは分かる. , ; 。 , , 。上の現実的な例を見てから抽象的な説明を見れば、もっとはっきりします.下の図を見てください.上の実際の例と対応しています. / , / , / data 抽象的な説明を見てから、最後に実際のデヴィュートン開発の例を見に来ました.Buttonを例にとる
1.ユーザーがbuttonをクリックしてタッチすると、システムはこのオブジェクトをメッセージソースとして取得し、fireの「touch」メッセージは、購読済みの「touch」メッセージの関数オブジェクトはいずれもこのメッセージを受信し、関数の実行を引き起こす.// button var btn_hello = ui("btn_hello");// function f1(){ // btn_hello deviceone.print("f1 ")}function f2(){ // btn_hello deviceone.print("f2 ")}//f1,f2 button touch btn_hello.on("touch",f1);btn_hello.on("touch",f2);2.buttonオブジェクトのために2つのカスタムメッセージ「message 1」と「message 2」を定義することができ、それぞれ2つの関数オブジェクトがこの2つのメッセージを購読する.しかし、最後にこのメッセージをトリガするには、開発者がfire関数を呼び出してトリガする必要があります.これはシステムメッセージとの違いです.// button var btn_hello = ui("btn_hello");// function f1(d){ // btn_hello message1 deviceone.print("f1 message1 , :"+d)}function f2(d){ // btn_hello message2 deviceone.print("f2 message2 , :"+d)}//f1,f2 button touch btn_hello.on("message1",f1);btn_hello.on("message2",f2);
  • //
  • btn_hello.fire("message1","data1");btn_hello.fire("message2","data2");

    , , button ? ? , button , , 。

    , deviceone 。 , 。

    1.deviceone , UI,MM,SM
    1. // SM
    2. var page = sm("do_Page");page.on("loaded",function()){ // page , , }page.on("message1",function(d)){ // page }page.fire("message1","data1");
    3. // MM
    4. var http = mm("do_Http");http.on("result",function()){ // http , , http }http.on("message1",function(d)){ // http }http.fire("message1","data1");
    5. //UI
    6. var alayout = ui("alayout_id1");alayout.on("touch",function()){ // alayout , , }alayout.on("message1",function(d)){ // alayout }alayout.fire("message1","data1");
      2. , 。 。

      ,test1.ui test2.ui page , , fire 。
      , page  page.getAddress()// test1.ui.js var page = sm("do_Page");deviceone.print(page.getAddress());page.on("message1",function(d)){ deviceone.print(d);}// test2.ui.js var page = sm("do_Page");deviceone.print(page.getAddress());page.fire("message1","data1"); じpageスコープでない は、メッセージを2つのページで できるアプリのスコープ のコードに できます.// test1.ui.js var app = sm("do_App");app.on("message1",function(d)){ deviceone.print(d);}// test2.ui.js var app = sm("do_App");app.fire("message1","data1");3. じ オブジェクトは、1つのオブジェクトソースのメッセージを り し してもいいです.メッセージをトリガすると、 は されます.これは によくあるエラーです.var page = sm("do_Page");var count = 0;function f(){ deviceone.print(" "+(count++));}page.on("message1",f);page.on("message1",f);page.fire("message1"); の を てください. すれば、2つをプリントします.2 したので、 がこのコードを くと いますか? の はこんなに には かりません. り しのon が されています. の はよく えばイベントをクリックしてon を します.ボタンをクリックするたびに、 り し します.
      4.メッセージの は ずメッセージのトリガの にしてください.これは がよくするミスです.var page = sm("do_Page");var count = 0;function f(){ deviceone.print(" "+(count++));}page.fire("message1");page.on("message1",f); の を て、 すれば がないです. がこのコードを くと いますか? の はこのように には かりません. えば、on がある のコールバック で される が いです.コールバック はいつ されますか?fireの に されますか? にこのような はいくつかのdeviceone.printを して してみてもいいです.onが に しますか?それともfireが に しますか?
      5. があると をキャンセルします. をキャンセルするのはoff です.あまり わないのは、close Pageの に に のページの を たしているドメイン のメッセージを リリースするからです.ただし、メッセージがappスコープ に されている は、 で をキャンセルする があります.トリガメッセージが すると、 に の が されます.var page = sm("do_Page");var count = 0;function f(){ deviceone.print(" "+(count++));}page.on("message1",f);page.fire("message1");

    7. page.off("message1");
    8. page.fire("message1");

      , , fire 。

      :https://www.cnblogs.com/andbut/p/5389785.html