イベントとメッセージの仕組みの理解
メッセージの基本概念
また、初心者の中にはこの仕組みに慣れていない人もいますので、まずは基本概念を簡単に紹介します.1つ/複数のメッセージは、次のいくつかの基本的な部分を含むデータ構造であると理解できる.
: ,
:
: ,
メッセージは種類別に2つに分けられます. : deviceone , 。
: , , , 。
例を挙げて説明します.例えば、ユーザーがdouをクリックします.Buttonボタンを押すと、システムメッセージが起動します.3つの部分が含まれています. : button
:touch
:
例えばユーザーがドウを通すButtonボタンはカスタムイベントをトリガします.3つの部分を含みます. : button
: , aaa,bbb,ccc
:
公開/購読モードリリース/購読モードは最も一般的な設計モードの一つであり、メッセージメカニズムの核心であり、その特徴は結合度を低くし、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
// SM
var page = sm("do_Page");
page.on("loaded",function()){
// page , ,
}
page.on("message1",function(d)){
// page
}
page.fire("message1","data1");
// MM
var http = mm("do_Http");
http.on("result",function()){
// http , , http
}
http.on("message1",function(d)){
// http
}
http.fire("message1","data1");
//UI
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");
page.off("message1");
page.fire("message1");
, , fire 。
:https://www.cnblogs.com/andbut/p/5389785.html
・