CheckboxModel,预选行

时间:2011-12-21 22:14:59

标签: javascript extjs extjs4 extjs-mvc

Heys Guys。

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

这是编辑“复杂”记录的表格。

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

  • 形式
    • 一个tabpanel
      • panel1(默认)
        • ...
        • ...
      • 是Panel2

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

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

in

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 方法当然不是一个选项:)

非常感谢。

2 个答案:

答案 0 :(得分:0)

嗯,问题解决了......只是选择了网格 afterrender 事件的行。

可能会帮助某人。

答案 1 :(得分:0)

在将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事件创建一次性监听器,然后设置选择。