1

このようなビューを作成しました

Ext.define('App.view.Message', {
    extend: 'Ext.Panel',
    alias: 'widget.message',
    config: {
        layout: 'vbox',
        bigText: 'big Text',
        smallText: 'small text',
        imageUrl: 'imageurl',
        oT: '',
        description: 'message description',

        items: [
            {
            flex: 3,
            xtype: 'container',
            layout: 'hbox',
            items: [
                {
                    xtype: 'container',
                    flex: 1,
                    items: [
                        {
                            html: '<h3>' + this.getBigText() + '</h3>'
                        },
                        {
                            html: '<h5>' + this.getSmallText() + '</h5>'
                        }
                    ]
                },
                {
                    xtype: 'image',
                    src: this.getImageUrl(),
                    flex: 1
                }
            ]
        },
            {
            flex: 6,
            xtype: 'container',
            layout: 'vbox',
            items: [
                {
                    flex:1,
                    html: '<h3>' + this.getBigText() + '</h3>'
                },
                {
                    flex:5,
                    html: '<p>'+this.getDescription()+'</p>'
                }
            ]
        },
            {
            flex: 1,
            xtype: 'button',
            text: this.getOT()
        }
        ]
    }
})

ビューの作成中に、このビューの作成時に渡される値 (構成値) にアクセスする必要があります。
soステートメントなどthis.getDescription()this.getBigText()エラーが発生しています..私が欲しいのは、私がビューを作成するときです..
どうすればいいですか?

4

5 に答える 5

4

コンストラクターをオーバーライドして構成値を取得する必要があるようです:

Ext.define('App.view.Message', {
extend: 'Ext.Panel',
alias: 'widget.message',

config: {
    layout: 'vbox',
    bigText: 'big Text',
    smallText: 'small text',
    imageUrl: 'imageurl',
    oT: '',
    description: 'message description'
},

constructor: function(config)
{
    config.items = [
        {
            flex: 3,
            xtype: 'container',
            layout: 'hbox',
            items: [
                {
                    xtype: 'container',
                    flex: 1,
                    items: [
                        {
                            html: '<h3>' + config.bigText + '</h3>'
                        },
                        {
                            html: '<h5>' + config.smallText + '</h5>'
                        }
                    ]
                },
                {
                    xtype: 'image',
                    src: config.imageUrl,
                    flex: 1
                }
            ]
        },
        {
            flex: 6,
            xtype: 'container',
            layout: 'vbox',
            items: [
                {
                    flex:1,
                    html: '<h3>' + config.bigText + '</h3>'
                },
                {
                    flex:5,
                    html: '<p>'+config.description+'</p>'
                }
            ]
        },
        {
            flex: 1,
            xtype: 'button',
            text: config.oT
        }
    ];

    this.callParent(arguments);
}

});

于 2012-11-13T15:54:15.163 に答える
2

Sencha Touch 2 は、設定のゲッターとセッターを自動的に生成しません。ただし、必要なことを行うには2つの方法があります。

  • 構成値を直接取得して設定しますExt.getCmp('your_component_id').config.bigText(他の構成と同様)

  • カスタム構成のゲッターとセッターを手動で作成します。たとえば、ビュー コンポーネントの構成として次のようなものを定義する必要があります。

    getBigText: function(){return this.bigText;}

    setBigText: function(value) {this.bigText = value;}

お役に立てれば。

于 2012-06-01T02:57:03.143 に答える
1

「表示」ファイルを定義してロードするとき、ブラウザは各行を調べます。その時点では、「View」インスタンスは作成されていません。ですから、当然これはそこにはありません。

ただし、初期化関数内で「this」を使用できます。したがって、次のようにコードを記述できます。

Ext.define('App.view.Message', {
    extend: 'Ext.Panel',
    xtype: 'message',
    config: {
        layout: 'vbox',
        bigText: 'big Text',
        smallText: 'small text',
        imageUrl: 'imageurl',
        oT: '',
        description: 'message description'
    },

initialize : function(){
     this.add([
            {
            flex: 3,
            xtype: 'container',
            layout: 'hbox',
            items: [
                {
                    xtype: 'container',
                    flex: 1,
                    items: [
                        {
                            html: '<h3>' + this.bigText + '</h3>'
                        },
                        {
                            html: '<h5>' + this.smallText + '</h5>'
                        }
                    ]
                },
                {
                    xtype: 'image',
                    src: this.imageUrl,
                    flex: 1
                }
            ]
        },
            {
            flex: 6,
            xtype: 'container',
            layout: 'vbox',
            items: [
                {
                    flex:1,
                    html: '<h3>' + this.bigText + '</h3>'
                },
                {
                    flex:5,
                    html: '<p>'+ this.description +'</p>'
                }
            ]
        },
            {
            flex: 1,
            xtype: 'button',
            text: this.oT
        }
        ]);

        this.callParent(arguments);
}
});
于 2012-06-01T08:39:14.200 に答える
0

そのためには、次のように初期化関数でビューにアイテムを追加することをお勧めします。

  ...
  config:{
  ...
  },
  initialize: function(){
    var me = this;
    me.callParent();

    var container = Ext.create('Ext.Container',{
      title = this.config.bigText
    });

    me.add(container);
  }
  ...

最善の解決策があるかどうかはわかりませんが、これはうまくいきます。

于 2012-05-31T20:28:14.753 に答える