1

コードをDRYのままにしておきたいので、独自の「ライブラリ」を作成しています。SimpleControllerを拡張して名前を送信するだけで、既に作成されているストアとビューを一般的に読み込むことができますが、コンソールにnameOfControllerが未定義であるというメッセージが表示されます。

1.)この例では、nameOfControllerが未定義であるのはなぜですか?

2.)SimpleControllerを拡張する方法を知っていますが、nameOfControllerを初期化する適切なタイミングはいつですか?init()関数で?ストアをロードする前でも実行される関数:[]とビュー:[]はありますか?

Ext.define('MyApp.controller.SimpleController', {
    extend: 'Ext.app.Controller',

    nameOfController: "",


    stores: ['MyApp.store.' + this.nameOfController],
    views: ['MyApp.view.' + this.nameOfController + '.Index']

編集:(拡張の例)

Ext.define('MyApp.controller.Users', {
    extend: 'MyApp.controller.SimpleController',

    nameOfController: "Users"  //I want to this nameOfController
                               //changes the one in superclass
});
4

3 に答える 3

1

コントローラのコンストラクタを定義できます。例:

Ext.define('MyApp.controller.SimpleController', {
    extend: 'Ext.app.Controller',
    nameOfController: "",

    //stores: ['MyApp.store.' + this.nameOfController],
    //views: ['MyApp.view.' + this.nameOfController + '.Index']

    constructor: function(config) {
        var name = config.nameOfController;

        config.stores = config.stores || [];
        config.views = config.views || [];

        config.stores.push('MyApp.store.' + name);
        config.views.push('MyApp.view.' + name + '.Index');

        this.callParent(arguments);
    }
});
于 2012-12-29T17:03:10.253 に答える
0

オブジェクトを定義する時点では、オブジェクトは ではありませんthis

匿名の自己呼び出し関数を使用できます。

Ext.define("MyApp.controller.SimpleController",(function(name) {
  return {
    extend: 'Exp.app.Controller',
    nameOfController: name,
    stores: ['MyApp.store.'+name],
    views: ['MyApp.view.'+name+'.Index']
  };
})("Users"));
于 2012-12-29T16:24:11.997 に答える
0

これはうまくいきます:

var name = "Users";

Ext.define('MyApp.controller.SimpleController', {
    extend: 'Ext.app.Controller',

    nameOfController: name,    

    stores: ['MyApp.store.' + name],
    views: ['MyApp.view.' + name + '.Index']
});

したがって、文字列は外部変数に格納されます。

于 2012-12-29T16:24:33.820 に答える