1

嘿伙计们。

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

这是一种用于编辑“复杂”记录的表格。

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

  • 形式
    • 标签面板
      • 面板 1(默认)
        • ...
        • ...
      • 面板2
        • 网格

创建表单后,我继续将记录的值加载到表单中并加载以选择网格上的行,相应于记录中嵌套存储中的记录。

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

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方法不是一种选择:)

非常感谢。

4

2 回答 2

1

Ext.form.field.Field我在添加mixinExt.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并设置选择。

于 2012-03-13T17:50:30.507 回答
1

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

可能会帮助某人。

于 2011-12-22T00:09:43.247 回答