ExtJSで楽しくRIA業務アプリ開発

株式会社sus4 開発チーム

ExtJS tips Htmleditorフィールドを必須項目にする

コメントはありません

このエントリーを含むはてなブックマークはてなブックマーク - ExtJS tips Htmleditorフィールドを必須項目にする この記事をクリップ!Livedoorクリップ - ExtJS tips Htmleditorフィールドを必須項目にする Yahoo!ブックマークに登録 BuzzurlにブックマークBuzzurlにブックマーク このエントリをつぶやくこのWebページのtweets Share on Tumblr FC2ブックマークへ追加 newsing it! この記事をChoix! Googleブックマークに追加 Bookmark this on Delicious Digg This

ExtJSのフォームフィールドにHtmleditorが有ります。このHtmleditorフィールドは文字通りTEXTの編集ができるリッチエディタのフィールド作ります。

このフィールドはExt.form.HtmlEditorクラスで定義されています。このクラスはExt.form.Fieldクラスを継承しています、同じサブクラスのExt.form.TextFieldにはallowBlankのコンフィグオプションがありますが、HtmlEditorクラスにはallowblankがないため必須項目にできません。
なんとなく頑張れば出来そうな気もしますが、他の人もきっとつまづいていそうなポイントだと思いフォーラムで解決方法を探してみると、簡単にみつかりました。
やり方はいくつかあるようですが、一番簡単そうなExt.form.HtmlEditorクラスをオーバーライドするを使ってみました。

Ext.form.HtmlEditorクラスをオーバーライドして必須にする
allowBlank:false, on html editor not working ? – Ext JS Forums
http://www.extjs.com/forum/showthread.php?t=37285より
コードはフォーラムのものそのままでは、エラーメッセージが英語なので、
日本語に変更しておきます。以下のコードでオーバーライドします。


    Ext.override(Ext.form.HtmlEditor, {
        markInvalid: function(msg){
            if(!this.rendered || this.preventMark){
                return;
            }
            msg = msg || this.invalidText;
            switch(this.msgTarget){
                case 'qtip':
                this.iframe.qtip = msg;
                this.iframe.qclass = 'x-form-invalid-tip';
                Ext.get(this.iframe).addClass(this.invalidClass);

                break;
            }
            return Ext.form.TextArea.superclass.markInvalid.call(this, [msg]);
        },
        clearInvalid: function(){
            if(!this.rendered || this.preventMark){
                return;
            }
            switch(this.msgTarget){
                case 'qtip':
                    this.iframe.qtip = '';
                    Ext.get(this.iframe).removeClass(this.invalidClass);
                    break;
            }
            return Ext.form.TextArea.superclass.clearInvalid.call(this);
        },
        validateValue:function(){
            if(this.allowBlank==false){
                  var value =this.getRawValue();
                  value = value.replace(/ /gi,"");
                  value = value.replace(/<br>/gi,"");
                  value = value.trim();
                  if(value != ''){
                      this.clearInvalid();
                      return true;
                  }
                  else{
                      this.markInvalid("この項目は必須項目です。")
                          return false;
                  }
            }else{
                this.clearInvalid();
                return true;
            }
        }
    });

このコードをHtmlFieldを使うところに設定しておいてあげれば、allowBlank有効になります。
オーバーライドしたことによりHtmlEditorフィールドの妥当性チェックが有効になったので、送信ボタンをvalidationの状態と連動されることもできるようになります。

今回のフォームのようなよくありそうなつまづきポイントは、フォーラムに既に議論された解決方法が載っている場合がよくあります。本家のフォーラムは英語ではかなりの議論が行われているので、頑張って探してみると意外と良いものが転がっていたりします。

Ext本家のフォーラム(英語)
http://www.extjs.com/forum/

  • Share/Bookmark


佐竹 裕行

1982年生まれ。滋賀→はこだて→名古屋→大垣→名古屋。
2006年名古屋学芸大学映像メディア学科卒、その後IAMAS卒(Studio2、6期生)。2009年にsus4に入社。学生時代はMax/MSP JitterやGainerばっかり使っていたが、現在社内では主にExtとモバイル開発、動画サービスのバックエンドを担当。知る人ぞ知るアノ鍵の人。

コメントを残す

Get Adobe Flash playerPlugin by wpburn.com wordpress themes