[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 メーリングリストの案内