[Seasar-user:7591] [Teeda]非同期Gridでの不具合

O.Goto [E-MAIL ADDRESS DELETED]
2007年 5月 11日 (金) 15:07:33 JST


後藤(goto)です。

Teeda Extensionで非同期Gridを使用していて、
prototype.js(http://www.prototypejs.org/)
を同時に使用すると、
最初の50件以降の表示がされなくなってしまうことに気がつきました。

ajax.jsを添付したパッチのように修正すれば回避できるようです。

また、prototype.jsとは無関係ですが、
Teeda.THtmlGrid.adjustGridSize()
が呼ばれるタイミングは現状最初にHTMLが描画されるタイミングのみとなっているようで、
同期Gridや非同期で50件以内であれば問題ないのですが、
非同期で50件超の場合にレイアウトが崩れてしまう場合があります。
#GrigYのみしか確認していません。

非同期で50件超の場合には
Teeda.THtmlGrid.adjustGridSize()
をコールバックFunctionの終わりにすれば解決できると思います。

また、現状のタイミングの
Teeda.THtmlGrid.adjustGridSize()
を残すとレイアウトが崩れてしまったので
非同期で50件超の場合にはコールバックFunctionの終わりのみの方がいいみたいです。
もしかすると複数回コールバックが呼ばれる場合は一番最後のコールバックのみにした方が
いいのかもしれません。


ちなみに
Kumu.Ajax.executeTeedaAjax()
を下記のようにハックして確認しました。

--------
var adjustGridSizeOrg = Teeda.THtmlGrid.adjustGridSize;
Teeda.THtmlGrid.adjustGridSize = function() {}; /* HTMLに書かれているものを無効化 */
var executeTeedaAjaxOrg = Kumu.Ajax.executeTeedaAjax;
Kumu.Ajax.executeTeedaAjax = function(callback, param, responseType) {
  var f = function(arg) {
    //alert("collback");
    var ret = callback(arg);
    adjustGridSizeOrg('xxxGridY'); /* callbak終わりにadjust */
    return ret;
  }
  f.toString = function() {
    return callback.toString();
  };
  return executeTeedaAjaxOrg(f, param, responseType);
};
--------
-------------- next part --------------
Index: C:/Documents and Settings/goto/My Documents/eclipse/workspace/teeda/teeda-ajax/src/main/resources/org/seasar/teeda/ajax/js/ajax.js
===================================================================
--- C:/Documents and Settings/goto/My Documents/eclipse/workspace/teeda/teeda-ajax/src/main/resources/org/seasar/teeda/ajax/js/ajax.js	(revision 3076)
+++ C:/Documents and Settings/goto/My Documents/eclipse/workspace/teeda/teeda-ajax/src/main/resources/org/seasar/teeda/ajax/js/ajax.js	(working copy)
@@ -175,7 +175,11 @@
       url += "?time=" + self.encodeURL(sysdate);
       if(null != params){
         for(var key in params){
-          parameters += "&" + key + "=" + self.encodeURL(params[key]);
+          var v = params[key];
+          if (v instanceof Function) {
+            continue;
+          }
+          parameters += "&" + key + "=" + self.encodeURL(v);
         }
       }
       url += parameters;
@@ -189,8 +193,12 @@
       params['time'] = self.encodeURL(sysdate);
       if(params){
         var array = new Array();
-        for(var v in params) {
-          array.push(v + "=" + encodeURIComponent(params[v]));
+        for(var key in params) {
+          var v = params[key];
+          if (v instanceof Function) {
+            continue;
+          }
+          array.push(key + "=" + encodeURIComponent(v));
         }
         parameters = array.join("&");
       }


Seasar-user メーリングリストの案内