Ext js миграция с 3 на 4 - сбой приложения ComboBox - PullRequest
0 голосов
/ 02 ноября 2011

Я мигрирую Ext js с 3.x на новую 4.0.2a.Кажется, что все в моем проекте работает нормально, кроме выпадающих списков.На самом деле не имеет значения, где я использую комбинированный список, но он продолжает сбивать мое приложение при запуске.

ошибка, которую я получаю: Uncaught RangeError: Превышен максимальный размер стека вызовов

Вот пример моего кода (страница входа с выпадающим списком):

index.html:

<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" />
<script type="text/javascript" src="ext-all-debug.js"></script>
<script type="text/javascript" src="ext3-core-compat.js"></script>
<script type="text/javascript" src="ext3-compat.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/My.Viewport.js"></script>
<script type="text/javascript" src="js/My.LoginWindow.js"></script>

app.js:

Ext.BLANK_IMAGE_URL = '/ext/resources/images/default/s.gif';
Ext.ns('My');

My.Base = function (){

   Ext.QuickTips.init();

   return {
       init: function () {

           var win = Ext.create('My.LoginWindow',{
              title: 'Authorization',
              callback: function(){
                   new Dag.Viewport();
               }
           });
           win.show();
       }
   }
}();
Ext.onReady(My.Base.init, My.Base);

My.LoginWindow.js:

Ext.define('My.LoginWindow', {

extend:'Ext.Window',
//alias: 'widget.LoginWindow', This is not required.
initComponent: function(){

    Ext.define('test', {
        extend: 'Ext.data.Model',
        fields: ['abbr', 'name']
    });

    var states = Ext.create('Ext.data.Store', {
        model: 'test',
        data : [
            {"abbr":"AL", "name":"Alabama"},
            {"abbr":"AK", "name":"Alaska"},
            {"abbr":"AZ", "name":"Arizona"}
        ]
    });

    this.form = Ext.create('Ext.form.Panel',{

        baseCls: 'x-plain',
        defaultType: 'textfield',
        defaults: {
            labelWidth: 55,
            allowBlank: false,
            anchor:'100%'
        },
        items: [{
            xtype: 'combobox',
            fieldLabel: 'Choose State',
            store: states,
            queryMode: 'local',
            displayField: 'name',
            valueField: 'abbr'
        },{
            fieldLabel: 'Account',
            name: 'account'
        },{
            fieldLabel: 'Login',
            name: 'login'
        },{
            fieldLabel: 'Password',
            name: 'password',
            inputType: 'password',
            listeners: {
                'specialkey': function(field, e){
                    if (e.getKey() == 13){
                        this.submitForm();
                    }
                },
                scope: this
            }
        }]
    });

    Ext.apply(this, {
        modal: true,
        resizable: false,
        closable: false,
        plain: true,
        width: 200,
        draggable: false,
        bodyStyle:'padding:5px;',
        items: this.form,
        buttons: [{
            text: 'Login',
            handler: this.submitForm,
            scope: this
        },{
            text: 'Cancel',
            handler: function(){
                this.form.getForm().reset();
            },
            scope: this
        }]
    });
    this.callParent(arguments);

},

submitForm: function(){
    var f = this.form.getForm();

    f.submit({
        url: 'myurl',
        waitMsg: 'Login...',
        waitTitle: 'Wait',
        scope: this,
        success: function(form, action){
            this.callback.call();                
            this.close();
        },
        failure: function(form, action){
            var res = action.result;
            var msg = 'Enter correct login and password, please.'

            if (res && res.message){
                msg = res.message;
            }

            Ext.Msg.alert('Error', msg);
        }
    });
}
});

Как вы можете видеть, используя imстандартный комбинированный список со стандартными данными (из примеров документов Сенчи).Когда я сейчас запускаю приложение, оно вылетает с сообщением об ошибке, описанным выше.Но когда я удаляю поле со списком, приложение полностью работает, я вижу окно входа в систему и могу войти в систему, чтобы показать My.Viewport.

Что может вызвать эту ошибку, какой-то код вызывает сам себя все время?Я потратил много часов на решение этой надоедливой проблемы, но пока не повезло.

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 03 ноября 2011

Я вижу некоторые вещи, которые вам все еще нужно обновить, например, переключение вызова суперкласса на callParent, замена новых вызовов X () на Ext.create () и т. Д. Однако у меня ничего не выскакивает, что могло бы вызватьпереполнение стека.Вероятно, вам следует устранить ошибки в Firebug и выполнить небольшую отладку, чтобы определить причину возникновения проблемы.

...