9
Ext.define('DigitalPaper.controller.Documents', {
 extend: 'Ext.app.Controller',

 views:  ['Documents'],
 stores: ['Documents'],
 models: ['Documents'],

 init: function() {
     console.log('[OK] Init Controller: Documents');
 } 
});

このコントローラーのモデルまたはビューを取得する関数は何ですか? 私はもう試した

  Ext.getModel('Documents');
  this.getModel('Documents');
  this.getModel();
  this.getDocumentsModel();

何か提案はありますか?

4

4 に答える 4

9

見つかった解決策:

コントローラでは、ビューへの参照を使用できます。

refs: [{
    ref: 'viewDocuments', // will be create the method this.getViewDocuments();
    selector: 'Documents'
}],

したがって、これでビューを取得できます。

this.getViewDocuments();
于 2012-07-02T09:26:56.913 に答える
7

Ext コントローラーは、関連するビュー インスタンスがいくつあっても、特定のコントローラーのインスタンスが 1 つしかないという点でかなり奇妙です。ほとんどの MVC または MVP システムでは、ビュー インスタンスごとに 1 つのコントローラー インスタンスがあります。

複数のビュー インスタンスを使用する場合は、それらのビューへの参照をコントローラーに保持しないでください。

ビュー インスタンスごとに 1 つのコントローラー インスタンスを持つ ExtJ 用の Deft の MVC 拡張機能 (および依存関係の挿入) を調べることができます。

http://deftjs.org/

とにかく、controller.getView() は、オブジェクト インスタンスではなく、ビュー CLASS への参照を返します。getModel() と同じです。getStore() DOES はストア インスタンスを返します。

コントローラーでは、次のようなことができます。

this.viewInstance = this.getDocumentsView().create();

モデルに単数形の名前を付けることもお勧めします。ドキュメントではありません。ドキュメントです。

于 2012-06-07T01:12:11.447 に答える
2

これはうまくいくはずです:

Ext.define('DigitalPaper.controller.Documents', {
 extend: 'Ext.app.Controller',

 views:  ['Documents'],
 stores: ['Documents'],
 models: ['Documents'],

 init: function() {
     console.log('[OK] Init Controller: Documents');

     // get references to view and model classes which can be used to create new instances
     console.log('View', this.getDocumentsView());
     console.log('Model', this.getDocumentsModel());

     // reference the Documents store
     console.log('Store', this.getDocumentsStore());

 } 

});

これらのメソッドは、ゲッターを作成する Ext コントローラーのメソッドによって作成されます。 http://docs.sencha.com/ext-js/4-0/source/Controller.html#Ext-app-Controller

そのメソッドは次のようになります。

createGetters: function(type, refs) {
    type = Ext.String.capitalize(type);
    Ext.Array.each(refs, function(ref) {
        var fn = 'get',
            parts = ref.split('.');

        // Handle namespaced class names. E.g. feed.Add becomes getFeedAddView etc.
        Ext.Array.each(parts, function(part) {
            fn += Ext.String.capitalize(part);
        });
        fn += type;

        if (!this[fn]) {
            this[fn] = Ext.Function.pass(this['get' + type], [ref], this);
        }
        // Execute it right away
        this[fn](ref);
    },
    this);
},
于 2012-06-07T01:11:50.570 に答える
0

getModel() と getView() はコントローラーのモデル/ビューを返しません。アプリ内のこれらのインスタンスを返します (存在しない場合はインスタンス化されます)。

これを使用して、ビュー/モデル名を取得できます。

this.views[0]

get をどこで使用しているか (つまり、 this.getModel('Details') ) はわかりませんが、これらはモデルのインスタンスを正しく返す必要があります (コンストラクターは、これらを参照する際に問題が発生する唯一の場所です)。

于 2012-06-06T15:37:06.433 に答える