no versions found for ApplicationFrameworkReferences / CustomElement/alierview_broadcast / en

AlierView: broadcast()

対象の AlierView に取り付けられた ViewLogic の子孫にメッセージを送ります。

構文

alierView.broadcast(message) => Promise<boolean>

引数

  • message: object

    送信するメッセージです。 このオブジェクトは以下のプロパティを持ちます:

    • id: string | null

      メッセージの識別子です。

    • code: string | null

      メッセージの追加の識別子です。

    • param: any | null

      メッセージが持つパラメータです。

    • origin: object | null

      メッセージの生成元です。

返値: Promise<boolean>

送信したメッセージが消費されたかどうかを解決時に示すプロミスです。 true として解決された場合、メッセージが消費されたことを示し、false なら消費されなかったことを示します。

例外

  • TypeError
    • 引数 message が非 null のオブジェクトでなかった場合。
  • AggregateError
    • 取り付けられた ViewLogic の子孫がメッセージ処理に失敗した場合。broadcast() 内で生じた例外をプロパティ errors: Error[] として持ちます。

class Broadcaster extends ViewLogic {
    constructor() {
        super();
        this.loadContainer({
            text: `<div id="hello"><p>Hello!</p></div>`,
            id: "hello"
        });
        this.relateElements(this.collectElements(this.container));
    }
};

class Audience extends ProtoViewLogic {
    async messageHandler(message) {
        message.deliver({
            post: message => {
                //  Alier.View に対して送られたメッセージを処理する
                console.log(
                    `audience = ${this.name}`,
                    `id = ${ message.id}`,
                    `code = ${message.code}`,
                    `param = ${message.param}`
                );
            },
        });
    }
};

const broadcaster = new Broadcaster();

const alice   = new Audience();
const bob     = new Audience();
const charlie = new Audience();

//  broadcaster に alice, bob, charlie を子孫として関連付ける
broadcaster.relateViewLogics({ alice, bob, charlie });

//  broadcaster を Alier.View へ取り付ける
Alier.View.attach(broadcaster);

//  Alier.View から broadcaster の子孫へメッセージを送る。
//  メッセージは alice, bob, charlie へそれぞれ送られる。
Alier.View.broadcast(Alier.message("post", "sent", "message"));
//  ==> "audience = alice"   "id = post" "code = sent" "param = message"
//  ==> "audience = boc"     "id = post" "code = sent" "param = message"
//  ==> "audience = chalier" "id = post" "code = sent" "param = message"

解説

AlierView に取り付けられている ViewLogic の子孫にメッセージを送ります。

取り付けられている ViewLogic がなければこの関数は何も行いません。

この関数は本質的に、alierView.logic?.broadcast(message) の簡略記法です。logic が存在する場合、その結果は ViewLogicbroadcast() に従います。