我尝试使用从其关联 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'
答案 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);
}
}
});