2010-12-29 26 views
0

TextCellEditorのサブクラスをSlickgridにするにはどうすればよいですか?SlickgridのTextCellEditorをサブクラス化するにはどうすればよいですか?

uniform libraryを使用して、スリックグリッドで使用されるエディタのスタイルを設定します。そうするために、私は、HTMLが生成された後

$("input, textarea, select, button").uniform(); 

を呼び出す必要があります。つまり、エディタオブジェクトのinit関数が呼び出された後です。現在、私はエディタのソースコード全体をコピーして、init関数が終了する直前にその行を追加します。私はちょうどエレガントでないようです。

編集:

slickgridになじみのない人には明らかなようにする、ここではコードです:$ input.uniform()

var myTextCellEditor = function(args) { 
     var $input; 
     var defaultValue; 
     var scope = this; 

     this.init = function() { 
      $input = $("<INPUT type=text class='editor-text' />") 
       .appendTo(args.container) 
       .bind("keydown.nav", function(e) { 
        if (e.keyCode === $.ui.keyCode.LEFT || e.keyCode === $.ui.keyCode.RIGHT) { 
         e.stopImmediatePropagation(); 
        } 
       }) 
       .focus() 
       .select(); 

       $input.uniform(); 
     }; 

     this.destroy = function() { 
      $input.remove(); 
     }; 

     this.focus = function() { 
      $input.focus(); 
     }; 

     this.loadValue = function(item) { 
      defaultValue = item[args.column.field] || ""; 
      $input.val(defaultValue); 
      $input[0].defaultValue = defaultValue; 
      $input.select(); 
     }; 

     this.serializeValue = function() { 
      return $input.val(); 
     }; 

     this.applyValue = function(item,state) { 
      item[args.column.field] = state; 
     }; 

     this.isValueChanged = function() { 
      return (!($input.val() == "" && defaultValue == null)) && ($input.val() != defaultValue); 
     }; 

     this.validate = function() { 
      if (args.column.validator) { 
       var validationResults = args.column.validator($input.val()); 
       if (!validationResults.valid) 
        return validationResults; 
      } 

      return { 
       valid: true, 
       msg: null 
      }; 
     }; 

     this.init(); 
    } 

は、は、デフォルトのTextCellEditorとは異なる唯一の行です。

答えて

0

.live()を使用して生成されたHTMLコンテンツに.ready()イベントをバインドすることができます。これにより、初期DOMに存在するコンテンツだけでなく将来のすべてのコンテンツに適用されます。

そう...

$('.classOfSlickGrid').live('ready', function() { 
    $("input, textarea, select, button").uniform(); 
} 
+0

がそれを試みたが、それは動作しませんでした。たぶんDOMが変更された後、DOM readyイベントが2回目に起動しないためでしょうか? – AngelBlaZe

関連する問題