【问题标题】:ExtJS 4.2.1 - issue with refs and controllersExtJS 4.2.1 - 引用和控制器的问题
【发布时间】:2014-01-08 00:36:05
【问题描述】:

我的标签定义如下:

Ext.define('CapHour.view.CapHourLabel', {
    extend: 'Ext.form.Label',

    alias: 'widget.caphourlabel',

    //itemId: 'capHourLabel',
    itemId: 'label',

    style: 'display:inline-block;text-align:center'
})

我的控制器是这样定义的:

Ext.define('CapHour.controller.CapHourController', {
    extend: 'Ext.app.Controller',

    stores: ['CapHour'],

    refs: [
        {
            ref: 'label',
            selector: 'label'
        }
    ],

    init: function() {
        var store = this.getCapHourStore();

        store.on('load', function(records, operation, success) {
            var label = Ext.ComponentQuery.query('#label')[0],
            //var label = this.getCapHourLabel(),
                hour = records.getAt(0).get('hour');

            label.setText('CAP HOUR<br/>'+hour, false);
        })
    }
})

我可以使用Ext.ComponentQuery.query() 很好,但是当我尝试使用this.getLabel() 时,API 调用返回undefined。有什么我忘记了吗?我尝试将 ref 中的选择器设置为 'label' 和 '#label' 但我一直得到相同的结果。

【问题讨论】:

    标签: javascript html css extjs controller


    【解决方案1】:

    您需要将 store 回调的范围设置为控制器:

    store.load({
        scope: this,
        callback: function(records) {
            console.log(this.getLabel());
        }
    });
    

    附带说明,您可能需要更好的选择器。当前选择器按 xtype 进行全局搜索,这意味着“抓住你看到的第一个带有 xtype 标签的东西”。

    【讨论】:

    • 哇,谢谢它的工作。是的,关于选择器,我最终将 itemId 设置为 capHourLabel。在我的参考文献中,我将选择器设置为“#capHourLabel”并且它起作用了。 :)
    • 快速提问...为什么 this.getLabel() 在控制器初始化函数的范围内返回 undefined?
    • 因为它还没有被创建。
    • 好的,谢谢。我在文档中读到 init 在启动执行之前被调用并创建视口。有道理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多