移动后查找列的索引

时间:2013-09-26 11:09:45

标签: javascript dhtmlx

我们正在使用DHTMLX Grid。需要一些帮助。

我有一个表,每个列(有过滤器/下拉列表)都分配了一个id,例如。 fac,date,sel,loc,tag ...等

我们对要设置的列的索引进行了硬编码,并在其他位置获取cookie。

    function doInitGrid(){  

mygrid.setColumnIds("fac,date,sel,loc,tag");  //set ids   
mygrid.attachEvent("onFilterStart",function(ind,data)
                            {
setCookie("Tray_fac_filter",mygrid.getFilterElement(0).value,365); //column index 0
setCookie("Tray_loc_filter",mygrid.getFilterElement(3).value,365);//column index 3
setCookie("Tray_tag_filter",mygrid.getFilterElement(4).value,365); //column index 4

mygrid.getFilterElement(0).value = getCookie("Tray_fac_filter")
mygrid.getFilterElement(3).value = getCookie("Tray_dep_filter")
mygrid.getFilterElement(4).value = getCookie("Tray_prg_filter")
});
}

但是当移动列时,问题就出现了,因为列的索引发生了变化,但是在setCookie / getCoookie中设置了

DHTMLX允许使用 -

获取id的索引
var colInd = grid.getColIndexById(id); 
eg: var  colInd = grid.getColIndexById(date); // outputs 1.
After moving the date column to the end -- fac, sel, loc, tag, date // it will output 4.

但是,我们有大约14列可以移动/重新排列,我可以使用

var colInd = grid.getColIndexById(id); 15 times

var facInd = grid.getColIndexById("fac");
var dateInd = grid.getColIndexById("date");
var selInd = grid.getColIndexById("sel");
var locInd = grid.getColIndexById("loc";
var tagInd = grid.getColIndexById("tag");

并将这些变量放在set / get cookie中。我在想是否有更好的方法。

为了更好地理解代码,我已将代码的最小化版本放在小提琴中。

http://jsfiddle.net/19eggs/s5myW/2/

2 个答案:

答案 0 :(得分:0)

我认为你得到了最好的答案。在循环中完成并且更容易:

var cookie_prefix = "Fray_filter_";
var cookie_dur = 365;
var num_cols = dhx_grid.getColumnCount();

// filter vals to cookies
for (var col_idx=0; col_idx<num_cols; col_idx++) {
  var filter = mygrid.getFilterElement(col_idx)
  if (filter) { // not all columns may have a filter
    var col_id = dhx_grid.getColumnId(col_idx);
    var cookie_name = cookie_prefix+col_id;
    setCookie(cookie_name, filter.value, cookie_dur);
  }
}

// cookies to filter vals
for (var col_idx=0; col_idx<num_cols; col_idx++) {
    var col_id = dhx_grid.getColumnId(col_idx);
  var filter_val = getCookie(cookie_prefix+col_id);
  var filter = mygrid.getFilterElement(col_idx)
  filter.value = filter_val;
}

答案 1 :(得分:0)

每次移动列时,都可以使用dhtmlxgrid本机事件分配正确的id。 该事件在onAfterCMove上调用,您可以在此处查看文档。 onAfterCMove Event

您可以这样做:

mygrid.attachEvent('onAfterCMove',function(cInd,posInd){
 //Your processing here to change the cookies; where cInd is the index of the column moved 
 //and posInd, is the position where it Was moved
}):