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 が存在する場合、その結果は ViewLogic の broadcast() に従います。