dhtmxgrid使用中的一些問題

來源:互聯網
上載者:User

(摘)

最近在用dhtmlx畫介面,遇到不少鬱悶的問題。中文資料少得出奇。。。
線上文檔也不夠詳細。還好他們有個論壇,而且論壇的搜尋功能做得還行。

1. grid
header中的#master_checkbox,會自動產生一個全選/全不選的checkbox,
本來是個很方便的功能,但是卻有一個致命問題:
gird在current_page為第一頁的時候,翻到第二頁,這時兩頁的資料全部緩衝在用戶端了,點擊#master_checkbox之後,這兩頁的checkbox全部被選中了。。。。。。
Master checkbox will affect only rows which is already loaded to the client side.

我只想選中當前頁面的checkbox哇。

只好去改原始碼 ext/dhtmlxgrid_filter.js:
原來的代碼是這樣的

dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
var self = this;
t.firstChild.onclick = function(e) {
self._build_m_order();
var j = self._m_order ? self._m_order[i] : i;
var val = this.checked ? 1 : 0;
self.forEachRow(function(id) {
var c = this.cells(id, j);
if (c.isCheckbox())
c.setValue(val)
});
(e || event).cancelBubble = true
}
};

forEachRow()也是會遍曆到所有本機快取的row。

改成這樣的:

dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
var self = this;
t.firstChild.onclick = function(e) {
self._build_m_order();
var j = self._m_order ? self._m_order[i] : i;
var val = this.checked ? 1 : 0;
/**
* huarong@masalife.com 2010 11 27
* to check/uncheck checkboxes only in the current page.
self.forEachRow(function(id) {
var c = this.cells(id, j);
if (c.isCheckbox())
c.setValue(val)
});
**/
var state=self.getStateOfView();
for (var k=state[1]; k<state[2]; k++){
var c=self.cellById(self.getRowId(k),j);
if (c.isCheckbox()) c.setValue(val);
}
/**
* end..
*/
 
(e || event).cancelBubble = true
}
};

2 還是關於#master_checkbox的問題。
比如在當前頁做了全選,然後翻頁,再翻回來,會發現checkbox仍然是選中狀態。
應該在翻頁的時候,清除所有checkbox的選中狀態,master_checkbox的選中狀態也要被清除。

mygrid.attachEvent("onBeforePageChanged", clearCheckedRows);
 
/**
* 翻頁時
* 清除checkbox的選中狀態
* 清除master_checkbox的選中狀態
*
* @return true. 如果返回false會導致翻頁的動作沒有進行。
*/
 
function clearCheckedRows()
{
 
mygrid.checkAll(false);
 
$("#mygrid_container").find("input").each(function(index){
if ($(this).attr("type") == "checkbox")
{
if ($(this).attr("checked"))
$(this).attr("checked", false);
}
});
return true;
}

注意這個函數一定要返回true,否則就沒辦法翻頁了。

3. dhtmlx的window,挺好用的。
突然發現window裡面的頁不執行js……
原來attachURL有二種調用方式:
attachURL(url, true);
這種是ajax方式,視窗中的頁面不執行js。

attachURL(url);
這種是iframe方式,可以執行js………

4. combobox怎樣做readonly

combo_zone1 = new dhtmlXCombo("combo_zone1", "alfa1", 90);
combo_zone1.readonly(1);
 
而且不能再使用enableFilteringMode(true);

5. 這次是關於JQuery的
The :input selector basically selects all form controls: input, textarea, select and button elements

6. combobox filter的時候,調用的url是怎樣的?

combo_zone1.enableFilteringMode(true,'./combo.php', true);
//實際的URL為:combo.php?pos=0&mask=a&a_dhx_rSeed=1290654577000
//mask就是關鍵詞。

7. grid不使用dynamic paging或者smart rendering的時候,
會把所有的資料都載入到用戶端,翻頁操作完全在本地,不與伺服器互動。

如果要dynamic分頁,比如每次只返回5頁資料給grid,
grid會在翻頁動作時,自動附加二個參數: posStart 與 count,
在sql裡面可以直接當作 LIMIT posStart, count 來用。

這樣的話,grid怎樣才能知道總的頁數呢?

在返回的xml中,
rows行裡面額外加上了二個參數:

<rows total_count="4000" pos="1000">
......
</rows>

total_count是總記錄數,
pos就是posStart
……然後grid會拿4000除以pagesize,就得出總頁數了。。。
這裡再提一下,如果採用分頁的toolbar皮膚,它會顯示一個下拉框,
裡面是下拉形式的第一頁,第二頁。。。第N頁。
如果你的GRID一共有10000頁。。。這個下拉框就會有10000個下拉的選項。。
我當時測試的GRID50萬頁,結果IE狂吃記憶體啊,單核CPU 100%,查了好久才發現是它的問題。
只能在dhtmlx grid的源碼中把這個下拉框去掉!!!

8 grid setColAlign()無效。。。
所有的欄位都是靠左對齊的。

查看了一下代碼,發現dhtmlx產生出的代碼是:

<TD title=649 valign=middle align=right _cellIndex="2" _clearCell="false" _title="true">649</TD>

這段代碼沒什麼問題。。。
問題在於我的css中,寫了一個

TD
{
padding: 0px;
border: 0px;
text-align: left;
 
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.