The Ext.data.DirectStore's constructor will not create the JsonReader if the 'fields' config is an Ext.data.Record constructor (instead of an array of fields). The problem lies right in the conditional operator in the call to the DirectStore's superclass constructor:

reader: (typeof(c.reader) == 'undefined' && typeof(c.fields) == 'object') ? new Ext.data.JsonReader( ... The reader will not be created if c.fields is an Ext.data.Record constructor because in that case:
typeof( c.fields ) == 'function'

Test Case:

var myRecord = Ext.data.Record.create( [ 'field1', 'field2' ] );

var myStore = new Ext.data.DirectStore( {
fields: myRecord,
directFn: Ext.ss.MyClass.myMethod,
autoLoad: true
} );
Error: 'this.reader is undefined' (Edit: Was just doing a bit more testing, and the thrown error itself might have been coming from a ComboBox, but the reader still does not get defined and the store does not load data.)

Sounds good to me! I just put the first suggestion in there in case there was a reason for testing if c.fields was an object instead of just testing for its existence. Didn't seem like it, but ya never know B)