質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1625閲覧

[JavaScript] Stimulus フレームワークでのコントローラーをまたぐ処理について

machine_machine

総合スコア163

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/04/03 18:02

https://stimulusjs.org/

『ページ内のサムネイルをクリックしたらモーダルウィンドウで拡大画像が表示される』といったような
まったく異なる要素間での連携が必要になるケースの実装についてです。

フレームワーク側でイベントをディスパッチするような仕組みはあるのでしょうか。

公式のリファレンスを見ても一切そういうものは見当たりませんでしたので pubsub-js を使用しました。
これでいいのならこのままでよいですが、Stimulus で用意されているものがあればそちらを使いたいと考えています。

サンプルコード

html

1<!-- サムネイルリスト --> 2 <ul> 3 <li 4 data-controller="thumbnail" 5 data-action="click->thumbnail#show" 6 data-thumbnail-index="0"> 7 <img src="//placehold.it/200/c99" alt=""> 8 </li> 9 <li 10 data-controller="thumbnail" 11 data-action="click->thumbnail#show" 12 data-thumbnail-index="1"> 13 <img src="//placehold.it/200/99c" alt=""> 14 </li> 15 </ul> 16 17 <!-- モーダルウィンドウ --> 18 <div data-controller="modal-window"> 19 <img 20 src="//placehold.it/800/c99" 21 data-target="modal-window.image"> 22 <img 23 src="//placehold.it/800/99c" 24 data-target="modal-window.image"> 25 </div>

js

1// thumbnail_controller.js 2import { Controller } from 'stimulus' 3import PubSub from 'pubsub-js' 4 5export default class extends Controller { 6 show() { 7 const index = this.data.get('index') 8 PubSub.publish('thumbnail:click', { index }) 9 } 10}

js

1// modal_window_controller.js 2import { Controller } from 'stimulus' 3import PubSub from 'pubsub-js' 4 5export default class extends Controller { 6 static targets = ['image'] 7 connect() { 8 PubSub.subscribe('thumbnail:click', this.show.bind(this)) 9 } 10 show(e, { index }) { 11 this.imageTargets[index].style.display = 'block' 12 } 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://github.com/stimulusjs/stimulus/issues/35#issuecomment-355311491

2018年の段階で「コントローラー間でやりとりする仕組みは用意していない」と明言されていました。

投稿2020/04/04 02:32

machine_machine

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問