CheckboxModel,预选择行

CheckboxModel, pre-selecting rows

本文关键字:选择 CheckboxModel      更新时间:2023-09-26

hey Guys.

我有这个错误已经困扰我几个小时了。我已经找到了"为什么",但我需要你的帮助找到"如何解决它"。

这是一个用于编辑"复杂"记录的表单。

我的布局(简单地说)是这样的:

  • 形式
    • tabpanel
      • panel1(默认)
      • panel2
          网格

创建表单后,我接着记录的值加载到表单中,并根据记录中嵌套存储中的记录加载到网格上的选择行。

和我的问题是,因为网格-或选择模型-没有视图(显然),它抛出一个"无法读取属性'长度'的未定义"

onSelectChange: function(record, isSelected, suppressEvent, commitFn) {
    var me      = this,
        views   = me.views,
        viewsLn = views.length, // HERE <-------------
        store   = me.store,
        rowIdx  = store.indexOf(record),
        eventName = isSelected ? 'select' : 'deselect',
        i = 0;
...

如果我插入一个setTimeout大到足以改变标签之前,它试图选择的行,它工作正常。

所以,有人知道如何解决这个问题吗?setTimeout方法当然不是一个选项:)

好了,问题解决了…刚刚选择了网格的afterrender事件上的行。

可能对某人有帮助

在将Ext.form.field.Field mixin添加到Ext.grid.Panel以创建自己的GridMultiSelect类型的表单字段时,我遇到了这个问题。具体来说,我发现在渲染网格之前调用了setValue()函数,因此设置选择失败。

setValue()函数可以在网格渲染之前和之后调用,所以这是我的解决方案:

if (this.rendered) {
    this.getSelectionModel().select(recordsToSelect);
} else {
    this.addListener('afterrender', function() {
        this.getSelectionModel().select(recordsToSelect);
    }, this, {
        single: true
    });
}

也就是说,如果它还没有呈现,为afterrender事件创建一个一次性侦听器,然后设置选择。