PDA

View Full Version : [FIXED-123][3.0.0] PagingToolbar store.un error if the store is defined by name



yroman
12 Aug 2009, 11:48 PM
Ext version tested: 3.0.0

Description:

If we specify store name for 'store' config parameter when adding PagingToolbar, the following error will occur:

this.store.un is not a function

Code investigation showed, that the store specified in the config is binded without 'initial' parameter, so bind method first tries to unbind current store. This code is from initComponent method (last three lines)


this.on('afterlayout', this.onFirstLayout, this, {single: true});
this.cursor = 0;
this.bindStore(this.store);


I think, red line should be changed to
this.bindStore(this.store, true); so that store unbind operations won't be called.

Thank you.

mjlecomte
13 Aug 2009, 3:37 AM
Please provide a test case as per:
http://www.extjs.com/forum/showthread.php?t=71015

Modify one of the existing demo examples perhaps.

yroman
13 Aug 2009, 8:56 AM
Took sample with paging from here: http://extjs.com/deploy/dev/examples/grid/paging.html
Code to reproduce:


/*!
* Ext JS Library 3.0+
* Copyright(c) 2006-2009 Ext JS, LLC
* [email protected]
* http://www.extjs.com/license
*/
Ext.onReady(function(){

// create the Data Store
var store = new Ext.data.JsonStore({
root: 'topics',
totalProperty: 'totalCount',
idProperty: 'threadid',
remoteSort: true,

fields: [
'title', 'forumtitle', 'forumid', 'author',
{name: 'replycount', type: 'int'},
{name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'},
'lastposter', 'excerpt'
],

// load using script tags for cross domain, if the data in on the same domain as
// this page, an HttpProxy would be better
proxy: new Ext.data.ScriptTagProxy({
url: 'http://extjs.com/forum/topics-browse-remote.php'
})
});
store.setDefaultSort('lastpost', 'desc');

Ext.StoreMgr.add("mystore", store);


// pluggable renders
function renderTopic(value, p, record){
return String.format(
'<b><a href="http://extjs.com/forum/showthread.php?t={2}" target="_blank">{0}</a></b><a href="http://extjs.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>',
value, record.data.forumtitle, record.id, record.data.forumid);
}
function renderLast(value, p, r){
return String.format('{0}<br/>by {1}', value.dateFormat('M j, Y, g:i a'), r.data['lastposter']);
}

var grid = new Ext.grid.GridPanel({
width:700,
height:500,
title:'ExtJS.com - Browse Forums',
store: "mystore",
trackMouseOver:false,
disableSelection:true,
loadMask: true,

// grid columns
columns:[{
id: 'topic', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
header: "Topic",
dataIndex: 'title',
width: 420,
renderer: renderTopic,
sortable: true
},{
header: "Author",
dataIndex: 'author',
width: 100,
hidden: true,
sortable: true
},{
header: "Replies",
dataIndex: 'replycount',
width: 70,
align: 'right',
sortable: true
},{
id: 'last',
header: "Last Post",
dataIndex: 'lastpost',
width: 150,
renderer: renderLast,
sortable: true
}],

// customize view config
viewConfig: {
forceFit:true,
enableRowBody:true,
showPreview:true,
getRowClass : function(record, rowIndex, p, store){
if(this.showPreview){
p.body = '<p>'+record.data.excerpt+'</p>';
return 'x-grid3-row-expanded';
}
return 'x-grid3-row-collapsed';
}
},

// paging bar on the bottom
bbar: new Ext.PagingToolbar({
pageSize: 25,
store: "mystore",
displayInfo: true,
displayMsg: 'Displaying topics {0} - {1} of {2}',
emptyMsg: "No topics to display",
items:[
'-', {
pressed: true,
enableToggle:true,
text: 'Show Preview',
cls: 'x-btn-text-icon details',
toggleHandler: function(btn, pressed){
var view = grid.getView();
view.showPreview = pressed;
view.refresh();
}
}]
})
});

// render it
grid.render('topic-grid');

// trigger the data store load
store.load({params:{start:0, limit:25}});
});

Changed lines are red.

Expected behaviour: Grid should render without errors.
Actual behaviour: Javascript error on the page and no grid.

evant
13 Aug 2009, 9:50 AM
Fixed in SVN r5056.