Определение элементов объекта внутри функции инициализации - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь создать элементы внутри компонента при его инициализации с помощью функции.

Обратите внимание на следующее:

Ext.define('mobi.form.Login',{
    extend:'Ext.form.Panel',
    config:{    
        items: [{
        xtype: 'textfield',
        name: 'Name',
        label: 'Name'
        }]
});
Ext.application({
    viewport: {
        layout:'fit'        
    },
    launch: function(){
        Ext.Viewport.add(Ext.create('mobi.form.Login'));
    }
})

Я пытаюсь получить mobi.form.login, чтобы сгенерировать его конфигурацию из функции, которая работает на initialize (или что я могу использовать для перезаписи указанной конфигурации).

Я знаю, что Sencha Touch 2 имеет функции constructor и initialize, но оба они, похоже, имеют arguments=[] (например, пустой массив)

Примерно так будет выглядеть, если бы я делал это в ExtJS 4.x:

Ext.define('mobi.form.Login',{
    extend:'Ext.form.Panel',
    initComponent:function(config){
        config=Ext.apply({}.config,{});//make sure config exists    
        config.items= [{
            xtype: 'textfield',
            name: 'Name',
            label: 'Name'
        }]
    Ext.apply(this, config);
    this.callParent(arguments);
    }
});

Ответы [ 4 ]

2 голосов
/ 20 марта 2012

Если вы когда-нибудь хотели это сделать, вы можете использовать constructor или initialize.

Конструктор, который вы бы использовали для синхронной логики, которая будет быстрой, и вы захотите, чтобы это произошло до инициализации компонента.Вы можете получить доступ к конфигурации через первый аргумент конструкторов:

Ext.define('MyComponent', {
    extend: 'Ext.Component',

    constructor: function(config) {
        console.log(config);

        this.callParent([config]);
    }
});

Ext.application({
    launch: function(){
        Ext.create('MyComponent', { test: 1 })

        // Will log out:
        // {
        //     test: 1
        // }
    }
});

Помните, что вам всегда нужно callParent с config / arguments в конструкторе.

В любой другой ситуации вы должны использовать initialize, который называется после того, как все конфиги были ... инициализированы.:) Мы часто используем это для добавления слушателей.

initialize: function() {
    this.on({
        ...
    });
}
2 голосов
/ 17 марта 2012

вам не нужно вызывать инициализацию вручную, это уже сделано конструктором, и при вызове этой функции вы можете получить доступ к данным элементов с помощью this.items и создавать там элементы панели

Ext.define('mobi.form.Login',{
    extend:'Ext.form.Panel',
    config: {
        items: []
    },

    initialize : function()
    {
        this.items = [Ext.create({
             xtype: 'textfield',
             name: 'Name',
             label: 'Name'
        })];

        this.callParent();
    }
});

Ext.application({
    viewport: {
        layout:'fit'        
    },
    launch: function(){
        Ext.Viewport.add(Ext.create('mobi.form.Login'));
    }
})
0 голосов
/ 16 марта 2012

Вы пробовали что-то похожее на это?Я просто передаю объект конфигурации в Ext.create, хотя сейчас не могу его протестировать.См. http://docs.sencha.com/touch/1-1/#!/api/Ext-method-create

Ext.Viewport.add(Ext.create(
    {
        xtype: 'mobi.form.Login',
        items: [ /*A list of items*/ ]
    }
));

Вы также можете вставить этот фрагмент в свою собственную функцию, которая принимает элементы в качестве параметра.Надеюсь, что это решит вашу проблему!

0 голосов
/ 14 марта 2012

Используйте следующее:

Ext.apply(this, {
    items: [
 .... 
    ]
});
...