我最近读到,使用Ext.getCmp被认为不是很好,所以我正在研究将其转换为推荐的up()或down()方法的应用程序。

我又来了一个小问题。在我的登录控制器中,它似乎不起作用,我也不知道为什么。我最初使用Ext.getCmp的控制器如下所示;

onLoginClick: function() {

    let formValues = this.getView().down('form').getValues();

    Application.login(formValues.email, formValues.password).then(function() {

        this.getView().destroy();

    }.bind(this), function(data) {
        Ext.getCmp('loginissues').setValue(data.message).show();
    });

}


我的看法有点像这样;

items: [{
    xtype: 'displayfield',
    id: 'loginissues',
    hidden: true
}, {
    xtype: 'textfield',
    id: 'email',
    name: 'email',
    fieldLabel: 'Email',
    allowBlank: true
}, {
    name: 'password',
    inputType: 'password',
    fieldLabel: 'Password',
    allowBlank: true
}]


因此,基本上发生的事情是,如果从API返回失败,它将把消息加载到显示字段中,然后取消隐藏。这一切都完美,但是如果我将视图中的id更改为itemId,然后将Ext.getCmp调用更改为类似以下内容,则它什么都不做。

this.getView().down('#loginissues').setValue(data.message).show();


没有错误或任何东西。

最佳答案

仅用这部分代码分解:

this.getView().down('#loginissues')


检查控制台,是否能够成功获取参考。否则将“向下”更改为“向上”功能。

您也可以尝试:

Ext.ComponentQuery.query('#loginissues')


尽管此方法搜索整个DOM,但是不受视图布局更改的影响。
元素在DOM中的位置很重要,控制权位于“向上”的位置的元素在下面。因此,“向上”有效。如果它(#loginissues)在控件之下,则“向下”将起作用。
这(“上”和“下”功能)是DOM中计算优化的搜索。搜索仅进行一半,因此我们比组件查询更快地捕获引用。

关于javascript - 在ExtJS 6中将ext.getCmp转换为up()或down()不会返回任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52866125/

10-12 13:13