ExtJs函数

今天在学习的时候遇到了一个让我很郁闷的问题,当然啦也是因为俺是菜鸟的原因啦,先把正确的代码贴上:

(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用习惯了,这下子明白了吧,好了不多写了,问题明白就行了,还有事情,先记录这么多吧…………

原文地址:https://www.cnblogs.com/andysd/p/3038641.html