Javascript 在initialize函数中定义对象的项

Javascript 在initialize函数中定义对象的项,javascript,sencha-touch,extjs,sencha-touch-2,Javascript,Sencha Touch,Extjs,Sencha Touch 2,我试图在组件初始化时使用函数在组件内部创建项 考虑以下几点: Ext.define('mobi.form.Login',{ extend:'Ext.form.Panel', config:{ items: [{ xtype: 'textfield', name: 'Name', label: 'Name' }] }); Ext.application({ viewport: {

我试图在组件初始化时使用函数在组件内部创建项

考虑以下几点:

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'));
    }
})
Ext.apply(this, {
    items: [
 .... 
    ]
});
我正在尝试获取
mobi.form.login
以从运行在
initialize
上的函数(或我可以用来重写指定配置的任何函数)生成其配置

我知道Sencha touch 2有
构造函数
初始化
函数,但它们似乎都有
参数=[]
(例如一个空数组)

如果我在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);
    }
});
使用以下命令:

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'));
    }
})
Ext.apply(this, {
    items: [
 .... 
    ]
});
使用以下命令:

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'));
    }
})
Ext.apply(this, {
    items: [
 .... 
    ]
});

你试过类似的东西吗?我只是将一个配置对象传递给Ext.create,但现在无法测试它。看


您也可以将此代码段粘贴到它自己的函数中,该函数将项目作为参数。希望这能解决你的问题

你试过类似的方法吗?我只是将一个配置对象传递给Ext.create,但现在无法测试它。看


您也可以将此代码段粘贴到它自己的函数中,该函数将项目作为参数。希望这能解决你的问题

您不需要手动调用initialize,它已经由构造函数完成,调用此函数时,您可以使用this.items访问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'));
    }
})

您不需要手动调用initialize,因为构造函数已经完成了初始化,调用此函数时,您可以使用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'));
    }
})

如果您想这样做,可以使用
构造函数
初始化

构造器,您将使用同步逻辑,这将是快速的,您希望发生在组件初始化之前。您可以通过构造函数的第一个参数访问配置:

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
        // }
    }
});
请记住,您将始终需要在构造函数中使用
config
/
参数
调用parent

在任何其他情况下,应在所有配置完成后使用
初始化
,称为。。。已初始化。:)我们在内部经常使用它来添加侦听器

initialize: function() {
    this.on({
        ...
    });
}

如果您想这样做,可以使用
构造函数
初始化

构造器,您将使用同步逻辑,这将是快速的,您希望发生在组件初始化之前。您可以通过构造函数的第一个参数访问配置:

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
        // }
    }
});
请记住,您将始终需要在构造函数中使用
config
/
参数
调用parent

在任何其他情况下,应在所有配置完成后使用
初始化
,称为。。。已初始化。:)我们在内部经常使用它来添加侦听器

initialize: function() {
    this.on({
        ...
    });
}

哎呀,我的ExtJS示例中也没有这个。我应该在哪个函数中调用它呢?简单地将一个对象配置合并到
中,如果它已经配置好了所有的东西,那么它就不会有多大用处了。您的示例中缺少了一些结束语,但我猜这是一个拼写错误。在执行Ext.apply之后,在调用parent之前,您是否尝试记录items数组中的内容?嗯,可能问题本身并不清楚,我在底部执行的伪代码是我希望在touch框架中重现的,因为据我所知,Sencha touch中不存在initComponent函数,因此这将是有效的代码(减去我忘记的错误和东西(que Ext.apply)。我正在寻找可以用来实现这一点的函数,希望有一个例子:)哎呀,我的ExtJS示例中也缺少了这个。但是我应该在哪个函数中调用它呢?如果它已经配置好了所有东西,那么简单地将一个对象配置合并到
中就不会有多大作用了。然后它应该可以工作了。您的示例中缺少了一些结束符,但我猜这是一个输入错误。您是否尝试记录了其中的内容在你执行Ext.apply之后调用parent之前的e items数组?嗯,也许问题本身不清楚,我在底部做的伪代码,是我想在touch框架中复制的,因为据我所知,Sencha touch中不存在initComponent函数,所以这将是工作代码(减去错误和我忘记的东西)(que Ext.apply)。我正在寻找可以用来实现这一点的函数,希望有一个例子:)如果你真的想这样做,你可以在
构造函数中完成。它会获取你传递给Ext.create()的配置只需链接
initComponent
,您就可以使用与上面使用的代码完全相同的代码。但问题是:您为什么要这样做?我们希望使用2.x使配置系统尽可能灵活,因此我们引入了
config
块,这样您就不需要initComponent了。在什么情况下您不能使用de>config
?构造函数没有参数,这很奇怪?Ext.define中的配置不允许您将
this
作为面板的作用域,这意味着您必须定义一个控制器才能在表单上执行此操作。例如,reset()。Mitchell Simoens有一些类似于我在其网格扩展中尝试执行的操作(我认为)。但是在文档中找不到他正在做的任何事情(除非我是盲人)。我脑海中的另一个例子是定义一个表单,该表单通过ajax调用在init上获取其配置(这对表单来说很有趣).既然你确实在技术上为我指明了正确的方向,欢迎你在这件事上要求赏金。
config
没有传递给构造函数的事实让我很生气。我添加了一个正确的答案。
constructor
应该传递参数;我添加了一个示例并对其进行了测试,效果很好。如果你真的想这样做,哟您可以在
构造函数中执行此操作。它获取传递给Ext.create()的配置