1

Extjs 6では、バインディングまたは直接割り当てを介して構成プロパティをビューに直接割り当てる方法は?

Ext.define('App.view.main.Main', {
extend: 'Ext.Container',

config: {
    btnLabel: 'MyButton'
},

someOtherProperty:'xyz',

items: [{
    xtype:'button',

    //text:this.someOtherProperty,
    //text:this.btnLabel,
    //text:this.getBtnLabel(),

    //here accessing this throws error, while loading this refers to windows object and not the class... 
    width:'150px'
    }],
});

プロパティを ViewModel に移動してアクセスすることはできますが、私の質問はこれです。クラス レベルのプロパティをその子コンポーネントに割り当てることはできませんか?

4

1 に答える 1

3

まあ、そうではありません。問題は、クラス プロトタイプで項目を定義していることです。つまり、そこでインスタンスに固有のことを行うことはできません。

それinitComponentがそのためです。私は通常items、この目的のために明示的に属性を定義します。

Ext.define('App.view.main.Main', {
  extend: 'Ext.Container',
  config: {
    btnLabel: 'MyButton'
  },
  someOtherProperty:'xyz',

  initComponent: function() {
    // The config properties have already been transferred to the instance
    // during the class construction, prior to initComponent being called.
    // That means we can now call this.getBtnLabel()
    this.items = [
      { xtype: 'button',
        text: this.getBtnLabel(),
        width:'150px'
    }]

    // Call the parent function as well. NB: After this, items won't be
    // a simple array anymore - it gets changed into a collection of
    // components.
    this.callParent(arguments);
  }
});

一般に、クラス レベルのプロパティとしてオブジェクトを追加する場合は注意が必要です。オブジェクトはプロトタイプのプロパティであり、そのクラスのすべてのインスタンス間で共有されるためです。

于 2016-09-29T20:51:57.800 に答える