0

为什么以下代码不起作用(ExtJS V6)?

Ext.define('Test', {
extend: 'Ext.window.Window',
xtype: 'basic-window',

config: {
    mytitle: ''
},

constructor: function (config) {
    Ext.apply(this, config);
    this.callParent(config);
},

requires: [
           'Ext.form.Panel'
       ],

height: 300,
width: 400,
scope: this, 
title: 'title: ' + this.mytitle,
autoScroll: true,
autoShow: true,
bodyPadding: 10,
html: "Lorem ipsum",
constrain: true,
});

var t = Ext.create('Test', {mytitle: 'testtitle'});
t.show();

我希望这会将窗口的标题设置为“标题:testtitle”。相反,它将标题设置为“标题:未定义”。

附加组件:如果我使用

...
title: 'title' + this.getMytitle(),
...

我得到“未捕获的类型错误:this.getMytitle 不是函数”。为什么?

4

1 回答 1

3

第一个问题 Whentitle: 'title: ' + this.mytitle被评估,this不指向您的类的实例。你应该从constructor

此外 ,调用callParent需要一组参数,总是更容易调用this.callParent(arguments)

最后, 您只能this.getMytitle()在调用构造函数后调用。

https://fiddle.sencha.com/#fiddle/uh9

constructor: function(config) {
    this.callParent(arguments);
    this.setTitle( 'title: ' + this.getMytitle() )                      
},

关于配置 响应正在设置的配置的正确方法

通过实施updateMytitle,它也可以在任何人调用时工作。setMytitle('title')

https://fiddle.sencha.com/#fiddle/uha

Ext.define('Test', {
    extend: 'Ext.window.Window',
    xtype: 'basic-window',
    requires: ['Ext.form.Panel'],
    config: {
        mytitle: ''
    },

    updateMytitle: function(mytitle) {
        this.setTitle('title: ' + mytitle);        
    },
于 2015-09-25T19:39:51.127 回答