【问题标题】:Sencha: Cannot call method 'getHeader' of undefinedSencha:无法调用未定义的方法“getHeader”
【发布时间】:2016-06-15 06:43:23
【问题描述】:

我正在尝试使用从它的关联 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();之后的代码
页面出现错误:
Uncaught TypeError: Cannot call method 'getHeader' of undefined

【问题讨论】:

    标签: javascript extjs sencha-touch-2


    【解决方案1】:

    我使用的 sencha touch 2.3.1 似乎有问题。 我只是在 List 组件中注释了 grouped=true 属性。它有效。

    代码:

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

    希望这一发现能为您节省时间并避免沮丧。

    【讨论】:

      【解决方案2】:

      问题在于方法 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);
                  }
      
              }
      
          }
      });
      

      【讨论】:

        【解决方案3】:

        组头在存储中没有记录。此覆盖通过检查调用 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);
                }
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-16
          • 2013-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多