見出し画像

【projectItemRenamer.jsx】選択判定 38【開発記】

選択判定とか書かれてる他の人にわかりにくい機能の続き🤤

環境確認
草案作成
UI構築
環境保存
環境読込
準備処理
選択判定 ←今ココ
候補処理
選択処理
改名処理
----備忘録
file にも addEventListener

→イベント駆動で情報取得を楽にしたい話

#jsx #開発記
#CustomEvent #EventTarget


どうやって通知を

画像1

前、環境保存でちょっとした情報を表示してた edittext 。ここに情報を送る良い方法は無いかなってずっと考えてたんだけど思ったのよ🤤

そうだ
イベント駆動にしよう

現在はなんかステータス用意して必要ならそれを見る、ってなってたんだけど結局どこかで「表示するオブジェクトに投げる」部分が必要なのよね🙄
今作ってるスクリプトの原型は CS3 とか CS4 とかの時代にあれこれこしらえた物だから親の window に情報表示のオブジェクトを登録してその中の text プロパティを直接書き換えるという、なんとも「汎用性欠」造りなわけなんだけど…😞
これ、イベント駆動型にすればそれを扱う親が addEventListener するだけで子になってるオブジェクト今回で言えばアイテム収集の処理は直接親が分からなくてもイベントだけ吐いてれば良くなるから相手が UIObject.text って限定しなくても良くなる筈ってわけ🤪
というかイベント駆動はそこが旨味なのよね🤤


EventTarget

画像2

ES6 もなんのその、 FIREFOX さんは勿論 EventTarget が存在🤤

画像3

でも ESTKExtendScript ToolKit には勿論無い…😞
Event は有るので組み立てはなんとかなるかな…
( CustomEvent も勿論無い)

EventTarget
https://developer.mozilla.org/ja/docs/Web/API/EventTarget
//	EventTarget の簡単な実装

var EventTarget = function() {
 this.listeners = {};
};
EventTarget.prototype.listeners = null;
EventTarget.prototype.addEventListener = function(type, callback) {
 if (!(type in this.listeners)) {
   this.listeners[type] = [];
 }
 this.listeners[type].push(callback);
};
EventTarget.prototype.removeEventListener = function(type, callback) {
 if (!(type in this.listeners)) {
   return;
 }
 var stack = this.listeners[type];
 for (var i = 0, l = stack.length; i < l; i++) {
   if (stack[i] === callback){
     stack.splice(i, 1);
     return;
   }
 }
};
EventTarget.prototype.dispatchEvent = function(event) {
 if (!(event.type in this.listeners)) {
   return true;
 }
 var stack = this.listeners[event.type].slice();
 for (var i = 0, l = stack.length; i < l; i++) {
   stack[i].call(this, event);
 }
 return !event.defaultPrevented;
};

MDN さまさまだわ🤪
でも MDN も永久保存ではないので写経🤤

ぶっちゃけこのコードを見つけたのでイベント駆動やろうと思ったとかとかとか🤤
だってほら、手で addEventListener 実装とかやりたくないじゃない?🤪

画像4

コピペ整形して this を self に置き換える🤤冗長な処置だけど…

画像5

CustomEvent はコピペもなにも継承して好きなプロパティ足すだけ🤪

画像6

………もしかして本来は EventTarget を継承して作るべきなのかな?🙄
まぁそんなしっかり作るシロモノじゃないのでこれでヨシ!👈🤪

画像7

独自のイベントなので独自の名前が居るのよね🤤
どこに辞書置くかで二転三転🤪

画像8

文字列与えて呼ぶだけの簡単 dispatcher で仕込みは完了…の筈🤪


次回は

このイベント継承オブジェクト正しく動くのか確認かな🤔
前回試しに動かした project.items の収集のとこに仕込んで試してみようね🤤
うまくいけばそのまま修正開始🤪🚩

この記事が気に入ったらサポートをしてみませんか?