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

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

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

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

Q&A

解決済

1回答

7628閲覧

【javascript】ダイアログ表示を共通化したい

tomoyuki123

総合スコア273

JavaScript

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

0グッド

0クリップ

投稿2017/04/03 02:25

javascirptのダイアログを共通化したくて以下のように書いてみたのですが、いまいちスマートじゃないです。
もっといいかんじに書く方法があれば教えてください。

■ダイアログクラス

javascript

1var Dialog = function () { 2 this.open = function (params) { 3 var dialog = $("#dialog"); 4 dialog.html(params["message"]); 5 dialog.dialog({ 6 title: params["title"], 7 modal: true, 8 height: 200, 9 width: 400, 10 resizable: false, 11 draggable: false, 12 buttons: { 13 "Cancel": function () { 14 // Cancel 15 }, 16 "OK": function () { 17 // OK 18 } 19 } 20 }); 21 } 22};

■呼び出し側

javascript

1var dialog = new Dialog(); 2var params = { 3 title: "タイトル", 4 message: "メッセージ" 5}; 6dialog.open(params);

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

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

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

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

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

guest

回答1

0

ベストアンサー

インスタンス化するときはインスタンス変数に扱いたいデータは定義したほうがその後の処理を行いやすいです。
また、処理はできるだけ小さく切り出してあげたほうがいいです。

javascript

1var Dialog = function(props){ 2 var self = this; 3 4 this.$el = $(props.el); 5 this.title = props.title; 6 this.message = props.message; 7 8 // messageをいれてdialogをひらう 9 this.open = function(){ 10 // メッセージを入れる 11 this.setMessage(); 12 13 // Dialogを開く 14 this.callDialog() 15 } 16 17 // カスタマイズしやすいようにOKの挙動を定義する 18 this.successCallback = function(){ 19 // OKの処理 20 } 21 // カスタマイズしやすいようにcancelの挙動を定義する 22 this.cancelCallback = function(){ 23 // cancelの処理 24 } 25 26 // optionの設定も切り分ける 27 this.option = function(title){ 28 return { 29 title: title, 30 modal: true, 31 height: 200, 32 width: 400, 33 resizable: false, 34 draggable: false, 35 buttons: { 36 "OK": this.successCallback, 37 "Cancel": this.cancelCallback 38 } 39 } 40 } 41 42 43 this.callDialog = function(){ 44 dialog.dialog(this.option(this.title)); 45 } 46 47 48 this.setMessage = function(){ 49 this.$el.html(this.message); 50 } 51} 52 53// デフォルトの挙動で初期化する 54var d1 = new Dialog({ 55 el: '#dialog1', 56 title: 'ダイアログ1のタイトル', 57 message: 'ダイアログ1のメッセージ' 58}) 59 60d1.open() //通常オプションでのオープン 61 62 63// OKおした時の挙動をカスタマイズする 64var d2 = new Dialog({ 65 el: '#dialog2', 66 title: 'ダイアログ2のタイトル', 67 message: 'ダイアログ2のメッセージ' 68}) 69 70d2.successCallback = function(){ 71 // カスタマイズしたOKボタンの挙動 72} 73 74d2.open()

参考になれば幸いです!

投稿2017/04/03 02:49

MasakazuFukami

総合スコア1869

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

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

tomoyuki123

2017/04/03 08:05

ありがとうございます!こちら参考に書き直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問