Sencha:无法调用未定义的方法'getHeader'

时间:2013-12-19 19:57:06

标签: javascript extjs sencha-touch-2

我尝试使用从其关联 form.Panel

修改的数据更新 dataview.List 的记录

代码:

onListItemTap:function(list,index,target,record,e){
            this.getMain().push({
            xtype:'userform',
            title:record.data.name,
            record:record,
            listeners:{
                        hide:function(form){
                            record.setData(form.getValues());
                            list.refresh();
                        }
                    }
            });
        },

record.setData(...); list.refresh(); 之后的代码 页面获取错误:
未捕获的TypeError:无法调用未定义的方法'getHeader'

3 个答案:

答案 0 :(得分:1)

似乎我正在使用的sencha touch 2.3.1存在问题。 我只是评论列表组件中的 groups = true 属性。它有效。

代码:

       {
        xtype:'list',
        id:'list-user',
        store:'Users',
        itemTpl: new Ext.XTemplate(...),
        flex:1,
        //grouped:true
        }

希望这一发现能为您节省时间和挫折。

答案 1 :(得分:1)

问题是方法updateHeaderMap List组件。

Ext.define('Nerine.override.List', {
    override:'Ext.dataview.List',

    updateHeaderMap: function() {

        var me = this,
            headerMap = me.headerMap,
            headerIndices = me.headerIndices,
            header, i, item;

        headerMap.length = 0;
        for (i in headerIndices) {
            if (headerIndices.hasOwnProperty(i)) {
                /* fix bug  */
//                console.log('aaa', me.getItemAt(i)); return null
//                console.log('bbb', me.getItemAt(i).getHeader());
                if( !(item = me.getItemAt(i))) {
                    continue;
                }
                header = me.getItemAt(i).getHeader();
                headerMap.push(header.renderElement.dom.offsetTop);
            }

        }

    }
});

答案 2 :(得分:0)

组标题在商店中没有记录。此覆盖通过检查调用scrollToRecord的记录是否确实在商店中来解决问题。此外,它解决了在painted事件中调用scrollToRecord时,有可能headerMap尚未就绪,这意味着使用scrollToRecord时pinnedHeader未正确更新。

Ext.define("MyApp.override.List", {
    override:'Ext.dataview.List',
    scrollToRecord: function(record, animate, overscroll) {
        var me = this,
            store = me.getStore(),
            index = store.indexOf(record);
        if(index>-1 && index < this.listItems.length) {
            this.updateHeaderMap();
            this.callOverridden(arguments);
        }
    }
});