今天在学习的时候遇到了一个让我很郁闷的问题,当然啦也是因为俺是菜鸟的原因啦,先把正确的代码贴上:
(function(){ Ext.regModel('State', { fields: [ 'name','abbr','slogan' ] }); var states = [ {"abbr":"AL","name":"Alabama","slogan":"The Heart of Dixie"}, {"abbr":"AK","name":"Alaska","slogan":"The Land of the Midnight Sun"}, {"abbr":"AZ","name":"Arizona","slogan":"The Grand Canyon State"}, {"abbr":"AR","name":"Arkansas","slogan":"The Natural State"}, {"abbr":"CA","name":"California","slogan":"The Golden State"}, {"abbr":"CO","name":"Colorado","slogan":"The Mountain State"}, {"abbr":"WY","name":"Wyoming","slogan":"Like No Place on Earth"} ]; var store11 = function createStore() { return Ext.create('Ext.data.Store', { autoDestroy: true, model: 'State', data: states }); }(); Ext.onReady(function(){ var formPanel = Ext.create('Ext.form.Panel', { renderTo: 'form-ct', frame: true, title:'XML Form', 340, bodyPadding: 5, waitMsgTarget: true, fieldDefaults: { labelAlign: 'right', labelWidth: 85, msgTarget: 'side' }, items: [{ xtype: 'fieldset', title: 'Contact Information', defaultType: 'textfield', defaults: { 280 }, items: [ { xtype: 'combobox', fieldLabel: 'State', name: 'state', store: store11, valueField: 'abbr', displayField: 'name', typeAhead: true, queryMode: 'local', emptyText: 'Select a state...' }, { xtype: 'datefield', fieldLabel: 'Date of Birth', name: 'dob', // allowBlank: true, maxValue: new Date(),format:'Y-m-d' } ] }], }); }); })();
显示的效果如下:
排版有点乱哈,以上是正确的代码的结果。
接下来就说我遇到的问题吧:
var store11 = function createStore() {
return Ext.create('Ext.data.Store', {
autoDestroy: true,
model: 'State',
data: states
});
};
这个代码熟悉吧?再仔细看看,和上面的代码有什么区别?看了好久终于知道了,这个比着上面的少了一个“()”,可别小看这个括号啊,就是因为这个store11才会被看作不同的角色,如果添加括号就代表store11是个对象了,理解否?不理解? 好吧,我就把自己的心得记录一下吧,还记得上次写的闭包的日志吧,函数后面加上括号代表这个函数立即执行,这些知道了吧,正确的代码是上面有括号的,如果把括号去点,就代表store11是个函数了,这个时候如果在item中的store元素的值设置为store11的话是不是就会出现类型转换异常啊?^。^,Java用习惯了,这下子明白了吧,好了不多写了,问题明白就行了,还有事情,先记录这么多吧…………