iteye_662
2010-12-09 17:06
浏览 268

后台控制 gridpanel中CheckboxSelectionModel 是否勾选怎么写?


后台json选中 CheckboxSelectionModel

var sm=new Ext.grid.CheckboxSelectionModel();
var cm=new Ext.grid.ColumnModel([
       sm,
        {
           align:'center',
               header : "车属单位" ,
               dataIndex : "deptname",
               renderer:ZeroorNull
        }, {
            align:'center',
            header : "车种名",
            dataIndex : "carkindsname",
               renderer:ZeroorNull

        }
]}
不知怎么才通过后台勾选??有什么提示,或者给事例。

 

 

希望,如图显示


  

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • iteye_5075 2010-12-10 12:22
    已采纳

    你在sotre里加一个selected列,如果要选中在后台把它设置用true

    [code="java"]
    {deptname:'aa',carkindsname:'bb',selected:true}
    [/code]
    [code="java"]
    var sm = new Ext.grid.CheckboxSelectionModel();
    var cm = new Ext.grid.ColumnModel([sm, {
    align : 'center',
    header : "车属单位",
    dataIndex : "deptname",
    renderer : ZeroorNull
    }, {
    align : 'center',
    header : "车种名",
    dataIndex : "carkindsname",
    renderer : ZeroorNull
    }])

    grid.store.on('load', function(store, records, options) {
    sm.clearSelections();
    Ext.each(records, function(rec) {
    if (rec.get('selected')) {
    sm.selectRow(grid.store.indexOfId(id),
    true);
    }
    })
    });

    [/code]

    点赞 评论
  • cyrilluce 2010-12-09 21:11

    可以分开来传递,Grid显示的数据是使用store去加载的,而选中状态是本地的。

    你可以给Grid扩展一个getSelections/setSelections接口,store让它自己去加载列表数据,选中数据用其它的ajax去请求,完成后调用setSelections接口设置。

    这里的setSelections是设计为透明的,不管何时调用都能有效,就算未render或store未加载完成也可以。

    P.S. 以前扩展过这样的Grid组件,不过手上没源码,花些时间回忆整理了大概逻辑,未调试验证,你自己研究改改吧。

    [code="js"]
    var store = new Ext.data.JsonStore({
    idProperty : "id", // 根据实际调整记录的唯一标识属性名
    listeners : {
    "load" : function(store){
    store.loaded = true; // 自己加个属性,以便判断store是否加载过
    }
    }
    });

    var grid = new Ext.grid.GridPanel({
    store : store,
    listeners : {
    "viewready" : function(grid){
    // 监控界面何时更新完毕,原始的viewready不保险
    grid.actualViewReady = true;
    }
    },
    // 根据id数组设置选中状态
    setSelections : function(ids){
    this._selectedIds = ids; // 暂时存于grid上
    this.updateSelectionUI(); // 尝试更新界面
    },
    // 获取当前选中的记录id数据
    getSelections : function(){
    var ids = [], records;
    records = this.getSelectionModel().getSelections();
    Ext.each(records, function(record){
    ids.push(record.id);
    });
    return ids;
    },
    // private
    getSelectedIndexs : function(){
    var ids = this._selectedIds, store = this.store, indexs = [];
    Ext.each(ids, function(id){
    indexs.push(store.indexOfId(id));
    });
    return indexs;
    },
    // private
    updateSelectionUI : function(){
    var store = this.store, indexs, sm;
    if(this.actualViewReady){
    if(store.loaded){ // 只有当store加载(load)完毕,并grid的界面渲染(render)完成时才能更新选中状态
    indexs = this.getSelectedIndexs();
    sm = this.getSelectionModel();
    if(sm.selectRows){
    sm.selectRows(indexs);
    }
    }else if(!this._storeHooked){ // 如果store未加载完成,延后,等它完成再更新
    this._storeHooked = true;
    store.on("load", this.updateSelectionUI, this, {single:true});
    }
    }else if(!this._viewHooked){ // 如果界面未更新完成,延后,也等它完成再更新
    this._viewHooked = true;
    this.on("viewready", this.updateSelectionUI, this, {single:true});
    }
    }
    });
    [/code]

    点赞 评论

相关推荐 更多相似问题