-
10 Jan 2013 5:56 PM #1
beforeload is not fired by loadRawData
beforeload is not fired by loadRawData
Ext version tested:
- Ext 4.2 Beta 2
Browser versions tested against:- Chrome 23.0.1271.97 m
I am not 100% sure this is a bug, it might be by design for various reasons, but loadRawData doesn't fire the beforeload event. This may have side effects and it can be confusing.
A side effect seems to be this bug: http://www.sencha.com/forum/showthread.php?176485
It is confusing because the function fires the load event, so my expectation was that the beforeload event gets fired as well. These two events should act together as a pair, in my mind.
I guess I can always call manually the fireEvent function on store before I make the loadRawData call, but still it doesn't feel right not to pair the two events together.
Steps to reproduce the problem:
I modified the array-grid.js sample.
The result that was expected:Code:Ext.require([ 'Ext.grid.*', 'Ext.data.*', 'Ext.util.*', 'Ext.state.*' ]); // Define Company entity // Null out built in convert functions for performance *because the raw data is known to be valid* // Specifying defaultValue as undefined will also save code. *As long as there will always be values in the data, or the app tolerates undefined field values* Ext.define('Company', { extend: 'Ext.data.Model', fields: [ {name: 'company'}, {name: 'price', type: 'float', convert: null, defaultValue: undefined}, {name: 'change', type: 'float', convert: null, defaultValue: undefined}, {name: 'pctChange', type: 'float', convert: null, defaultValue: undefined}, {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia', defaultValue: undefined} ], idProperty: 'company' }); Ext.onReady(function() { Ext.QuickTips.init(); // setup the state provider, all state information will be saved to a cookie Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider')); // sample static data for the store var myData = [ ['3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'], ['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'], ['Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'], ['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'], ['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'], ['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12:00am'], ['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'], ['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'], ['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'], ['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'], ['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am'], ['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'], ['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'], ['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'], ['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'], ['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'], ['International Business Machines', 81.41, 0.44, 0.54, '9/1 12:00am'], ['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'], ['JP Morgan & Chase & Co', 45.73, 0.07, 0.15, '9/1 12:00am'], ['McDonald\'s Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'], ['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'], ['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'], ['Pfizer Inc', 27.96, 0.4, 1.45, '9/1 12:00am'], ['The Coca-Cola Company', 45.07, 0.26, 0.58, '9/1 12:00am'], ['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'], ['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9/1 12:00am'], ['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'], ['Verizon Communications', 35.57, 0.39, 1.11, '9/1 12:00am'], ['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am'] ]; /** * Custom function used for column renderer * @param {Object} val */ function change(val) { if (val > 0) { return '<span style="color:green;">' + val + '</span>'; } else if (val < 0) { return '<span style="color:red;">' + val + '</span>'; } return val; } /** * Custom function used for column renderer * @param {Object} val */ function pctChange(val) { if (val > 0) { return '<span style="color:green;">' + val + '%</span>'; } else if (val < 0) { return '<span style="color:red;">' + val + '%</span>'; } return val; } // create the data store var store = Ext.create('Ext.data.ArrayStore', { model: 'Company', //data: myData, listeners: { beforeload: { fn: function (store, operation, eOpts) { alert('beforeLoad'); } }, load: { fn: function (store, operation, eOpts) { alert('load'); } } } }); store.loadRawData(myData); // create the Grid var grid = Ext.create('Ext.grid.Panel', { store: store, stateful: true, collapsible: true, multiSelect: true, stateId: 'stateGrid', columns: [ { text : 'Company', flex : 1, sortable : false, dataIndex: 'company' }, { text : 'Price', width : 75, sortable : true, renderer : 'usMoney', dataIndex: 'price' }, { text : 'Change', width : 75, sortable : true, renderer : change, dataIndex: 'change' }, { text : '% Change', width : 75, sortable : true, renderer : pctChange, dataIndex: 'pctChange' }, { text : 'Last Updated', width : 85, sortable : true, renderer : Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange' }, { menuDisabled: true, sortable: false, xtype: 'actioncolumn', width: 50, items: [{ icon : '../shared/icons/fam/delete.gif', // Use a URL in the icon config tooltip: 'Sell stock', handler: function(grid, rowIndex, colIndex) { var rec = store.getAt(rowIndex); alert("Sell " + rec.get('company')); } }, { getClass: function(v, meta, rec) { // Or return a class from a function if (rec.get('change') < 0) { return 'alert-col'; } else { return 'buy-col'; } }, getTip: function(v, meta, rec) { if (rec.get('change') < 0) { return 'Hold stock'; } else { return 'Buy stock'; } }, handler: function(grid, rowIndex, colIndex) { var rec = store.getAt(rowIndex); alert((rec.get('change') < 0 ? "Hold " : "Buy ") + rec.get('company')); } }] } ], height: 350, width: 600, title: 'Array Grid', renderTo: 'grid-example', viewConfig: { stripeRows: true, enableTextSelection: true } }); });
The 'beforeload' alert message pops up as well
The result that occurs instead:
Only the 'load' alert message pops up.
Operating System:- Windows 7 64 bit
-
11 Jan 2013 7:03 AM #2Sencha - Senior Forum Manager
- Join Date
- Mar 2007
- Location
- St. Louis, MO
- Posts
- 33,624
- Vote Rating
- 434
Thanks for the report.
Mitchell Simoens @SenchaMitch
Sencha Inc, Senior Forum Manager
________________
http://www.JSONPLint.com - Source to lint your JSONP!
Check out my GitHub, lots of nice things for Ext JS 4 and Sencha Touch 2
https://github.com/mitchellsimoens
Think my support is good? Get more personalized support via a support subscription. https://www.sencha.com/store/
Need more help with your app? Hire Sencha Services services@sencha.com
Want to learn Sencha Touch 2? Check out Sencha Touch in Action that is almost in print!
When posting code, please use BBCode's CODE tags.
Success! Looks like we've fixed this one. According to our records the fix was applied for
EXTJSIV-8213
in
4.2.0 Sprint 3.


Reply With Quote