1

功能是有一个弹出窗口,其中包含选定的基本网格行:基本网格包含检查列,如下所示:

{
        xtype: 'checkcolumn',
        text: 'Select',
        dataIndex: 'active',
        itemId: 'checkcolumnId',
        width: 55
     }

选中或取消选中复选框时调用的控制器:

'#checkcolumnId' : {
        checkchange : function(column, recordIndex, checked) {
          if(checked){
            var rec = statusStore.getAt(recordIndex);
            reassignStore.add(rec);
          }else if(statusStore.getAt(recordIndex)!=null){
            var indexNumber = reassignStore.findExact('taskId', statusStore.getAt(recordIndex).data.taskId, 0);
            reassignStore.removeAt(indexNumber);
          }
          return false;
        }
     }

reassign store 是弹出式存储,它显示基本网格的选定(检查)记录。

当我检查基本网格中一行的复选框时,我可以看到该记录显示在重新分配网格中,但问题是当我再次单击复选框(基本网格的检查列)时,它不会显示未选中状态,尽管它执行取消选中操作,即它进入上述 checkchange 方法的错误条件。

此功能可在 ext-4.0.7-gpl/examples/grid/row-editing.html 使用 chrome 调试器我发现当我尝试取消选中基本网格中的行时,它不会调用 CheckColumn.js 的渲染器方法,即负责更改检查列的css。

CheckColumn.js

renderer : function(value){
        var cssPrefix = Ext.baseCSSPrefix, cls = [cssPrefix + 'grid-checkheader'];
        if (value) {
            cls.push(cssPrefix + 'grid-checkheader-checked');
        }
        return '<div class="' + cls.join(' ') + '">&#160;</div>';
    }

如果我评论 reassignStore.add(rec); 或 reassignStore.removeAt(indexNumber); 我能够正确取消选中的 checkChange 方法行(即应用了 css,因此我可以直观地看到未选中的框)

这是一个错误吗?为什么我取消选中时没有看到 css 应用?

4

1 回答 1

1

包含复选框的此列的数据类型是什么?如果它不是布尔值,则可能存在这样的问题。因为在CheckColumn.js中,有这样的语句:

checked = !record.get(dataIndex);

因此,如果record.get(dataIndex) == false, checked 应该为真,但例如 , record.get(dataIndex) == "false"checked 仍然是假的。在这种情况下,渲染器永远不会被调用。

于 2012-06-26T00:44:28.387 回答