首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Extjs6.2现代工具包-扩展文本框

Extjs6.2现代工具包-扩展文本框
EN

Stack Overflow用户
提问于 2018-03-08 00:40:22
回答 1查看 272关注 0票数 0

我仍然在学习EXTJ,我想要做的事情之一就是扩展一个组件。以下是我的例子:

代码语言:javascript
复制
Ext.define('MyApp.view.CustomTextField',{
extend: 'Ext.field.Text',
xtype: 'customtextfield',

config:
{
    fieldID: null,
    langID: null
},
initialize: function() {
    alert("init"); //1. called before I navigate to view
     Call a controller method here
    this.callParent(arguments);
},
initComponent: function () {
    alert("initComp"); //2. not called at all
    Call a controller method here
    this.callParent(arguments);

} 

我想调用一个控制器方法来验证用户是否有权限查看这个字段,并相应地执行下一步操作。当我导航到视图时,我希望这种验证发生。

在我的视图中,我将这个自定义字段用作:

代码语言:javascript
复制
xtype: 'fieldset',
        margin: 10,
        bind: '{workOrders}',
        title: 'Dispatch Information',
        items: [
            {   
                id: 'Tag',
                xtype: 'customtextfield',
                name: 'Tag',
                label: 'Tag',
                bind: '{Tag}',
                labelAlign: 'top'
            },

但initComponent从未被解雇过。初始化将被触发,甚至在加载我的商店之前。如何正确地扩展此控件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-08 06:46:18

在ExtJS 6现代版中,文本字段没有initComponent事件。initComponent事件在文本字段中有经典版本。

为了调用controller中的事件,您需要创建controller并为您定义view

在这个小提琴中,我使用formViewControllertextfieldViewModel创建了一个演示。我希望这将有助于/指导你达到你的要求。

有关更多细节,请参阅ExtJS 文档

代码片段

代码语言:javascript
复制
Ext.application({
    name: 'Fiddle',

    launch: function () {

        //Define the cutsometext from extending {Ext.field.Text}
        Ext.define('CustomText', {
            extend: 'Ext.field.Text',
            xtype: 'customtext',
            labelAlign: 'top',
            listeners: {
                initialize: 'onInitializeCutsomText'
            }
        });

        Ext.define('FormModel', {
            extend: 'Ext.app.ViewModel',
            alias: 'viewmodel.formmodel',

            data: {
                user: {
                    firstName: 'Narendra',
                    lastName: 'Jadhav',
                    email: 'narendrajadhav105@gmail.com'
                },
                permissionCng: {
                    firstName: false,
                    lastName: false,
                    email: true,
                    isAdmin: false
                }
            }

        });
        //Define the FormController from extending {Ext.app.ViewController}
        Ext.define('FormController', {
            extend: 'Ext.app.ViewController',
            alias: 'controller.formctn',

            onInitializeCutsomText: function (textfield) {
                var permissionCng = this.getViewModel().get('permissionCng');
                // Here is just basic example for disabled textfield on initialize event.
                //In your case you can put your requirement.
                textfield.setDisabled(permissionCng[textfield.getName()]);
            }
        });

        //Creating form
        Ext.create('Ext.form.Panel', {
            fullscreen: true,
            viewModel: {
                type: 'formmodel'
            },
            controller: 'formctn',
            items: [{
                xtype: 'fieldset',
                title: 'Personal Info',
                defaults: {
                    xtype: 'customtext' //Here I am using {customtext}
                },
                items: [{
                    label: 'First Name',
                    name: 'firstName',
                    bind: {
                        value: '{user.firstName}',
                        //You can also use like property
                        //hidden:'{permissionCng.firstName}'
                    }
                }, {
                    label: 'Last Name',
                    name: 'lastName',
                    bind: {
                        value: '{user.lastName}',
                        //You can also use like property
                        //hidden:'{permissionCng.firstName}'
                    }
                }, {
                    label: 'Email Id',
                    name: 'email',
                    bind: {
                        value: '{user.email}',
                        //You can also use like property
                        //hidden:'{permissionCng.firstName}'
                    }
                }, {
                    label: 'Admin Name',
                    name: 'isAdmin',
                    bind: {
                        value: '{user.isAdmin}',
                        //You can also use like property
                        hidden: '{!permissionCng.isAdmin}'
                    }
                }]
            }]
        });
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49163602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档