PDA

View Full Version : List.groupTpl cannot accept an XTemplate



jep
9 Jun 2011, 1:28 PM
This could be considered a feature request, as List.groupTpl doesn't show up in the documents so it's hard to say what it's "supposed" to do. However, I've seen it given out by Sencha staff as part of answers, and it isn't marked private in the source code, so I think perhaps you mean for us to use it.

In any case, the way List.initComponent works, groupTpl can't receive an XTemplate instance, so this means it can't have user functions. This is due to this piece of code in List.initComponent:


if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
this.tpl = new Ext.XTemplate(this.groupTpl);
}


This strips it of any user functions. Instead, the following could be used:


if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
this.tpl = new Ext.XTemplate(this.groupTpl);
}
else if (this.groupTpl && this.groupTpl.html)
this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);


In the meantime, here's the override I'm using as a workaround:


Ext.jep.List = Ext.extend(Ext.List, {
initComponent : function() {
Ext.jep.List.superclass.initComponent.apply(this);

if (this.grouped && this.groupTpl && this.groupTpl.html) {
this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);
}
}
});

jep
9 Jun 2011, 2:31 PM
Related:
http://www.sencha.com/forum/showthread.php?136522-Here-s-a-list-that-can-be-grouped-ungrouped-and-fixes-some-other-grouping-bugs&p=612365#post612365

Ballsacian1
13 Jun 2011, 12:24 PM
I solved this issue by using Ext.createSequence to hook into the Ext.List.prototype.initComponent which is right after this.tpl gets created. I think loop through this.tplFunctions (defined by you) and append them to the this.tpl object using this.tpl[key] = value.

I have also found through my digging that you can accomplish something similar with NestedLists if you create a sequence or override on the getSubList method which allows you to then modify the this.tpl object and happens early enough that no data has been inserted into the store or rendered yet.

Hope that helps,

Jordan


This could be considered a feature request, as List.groupTpl doesn't show up in the documents so it's hard to say what it's "supposed" to do. However, I've seen it given out by Sencha staff as part of answers, and it isn't marked private in the source code, so I think perhaps you mean for us to use it.

In any case, the way List.initComponent works, groupTpl can't receive an XTemplate instance, so this means it can't have user functions. This is due to this piece of code in List.initComponent:


if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
this.tpl = new Ext.XTemplate(this.groupTpl);
}


This strips it of any user functions. Instead, the following could be used:


if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
this.tpl = new Ext.XTemplate(this.groupTpl);
}
else if (this.groupTpl && this.groupTpl.html)
this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);


In the meantime, here's the override I'm using as a workaround:


Ext.jep.List = Ext.extend(Ext.List, {
initComponent : function() {
Ext.jep.List.superclass.initComponent.apply(this);

if (this.grouped && this.groupTpl && this.groupTpl.html) {
this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);
}
}
});