2012-01-23 6 views
0

ここに記載されているものと同じ質問が表示されます。Set listener for store events in a controllerがありますが、私のお気に入りのソリューションwaは1 sthis:ありコントローラー内のストアイベントのリスナーを設定する際に例外が発生する

Ext.define('Photoalbum.view.Table', { 
extend : 'Ext.dataview.DataView', 
xtype : 'photoalbum-table', 

config : { 
    width: 3000, 
    height: 3000, 
    itemTpl: new Ext.XTemplate(
     '<tpl for=".">', 
     '<div class="x-panel x-floating" style="width: {width+12}px !important; height: {height+12}px !important; top: {top}px !important; left: {left}px !important;">', 
     ' <img src="{url}">', 
     '</div></tpl>' 
    ) 
}, 

constructor : function(config) { 
    Ext.apply(config, { 
     store : Ext.create('Photoalbum.store.Images') //I don't like using storeId (or any other id) so I create the store class 
    }); 

    this.callParent([config]); 
    this.getStore().on('load', Photoalbum.getController('App').handleImagesLoad, this); 
    this.getStore().load(); 
} 
}); 

私は、次のexcpetion取得:私が代わりにコントローラ定義された関数を呼び出すしようとする、自己定義された関数を呼び出す場合

Uncaught TypeError: Object #<Object> has no method 'getController' 
Ext.define.constructorTable.js:23 
Ext.apply.create.fsencha-touch-all.js:15 
(anonymous function) 
Ext.ClassManager.instantiatesencha-touch-all.js:15 
Ext.ClassManager.instantiateByAliassencha-touch-all.js:15 
Ext.apply.factorysencha-touch-all.js:15 
Ext.define.factoryItemsencha-touch-all.js:15 
Ext.define.addsencha-touch-all.js:15 
b.implement.callParentsencha-touch-all.js:15 
override.addsencha-touch-all.js:15 
Ext.define.applyItemssencha-touch-all.js:15 
b.registerPreprocessor.Ext.Object.each.i.(anonymous function)sencha-touch-all.js:15 
b.registerPreprocessor.Ext.Object.each.i.(anonymous function).g.(anonymous  function)sencha-touch-all.js:15 
Ext.define.applyActiveItemsencha-touch-all.js:15 
(anonymous function)sencha-touch-all.js:15 
b.implement.initConfigsencha-touch-all.js:15 
Ext.define.initializesencha-touch-all.js:15 
Ext.define.constructorsencha-touch-all.js:15 
b.implement.callParentsencha-touch-all.js:15 
Ext.define.constructorsencha-touch-all.js:15 
b.implement.callParentsencha-touch-all.js:15 
Ext.define.override.constructorsencha-touch-all.js:15 
b.implement.callParentsencha-touch-all.js:15 
Ext.define.constructorsencha-touch-all.js:15 
b.implement.callParentsencha-touch-all.js:15 
override.constructorsencha-touch-all.js:15 
Ext.apply.create.fsencha-touch-all.js:15 
(anonymous function) 
Ext.ClassManager.instantiatesencha-touch-all.js:15 
(anonymous function)sencha-touch-all.js:15 
Ext.apply.createsencha-touch-all.js:15 
Ext.define.onBeforeLaunchApplication.js:30 
Ext.apply.onDocumentReadysencha-touch-all.js:15 
Ext.apply.onReady.nsencha-touch-all.js:15 
Ext.apply.triggerReadysencha-touch-all.js:15 
Ext.apply.refreshQueuesencha-touch-all.js:15 
Ext.apply.refreshQueuesencha-touch-all.js:15 
Ext.apply.refreshQueuesencha-touch-all.js:15 
Ext.apply.onFileLoadedsencha-touch-all.js:15 
(anonymous function)sencha-touch-all.js:15 
Ext.apply.injectScriptElement.ksencha-touch-all.js:15 

を、それが動作します。上記の他の方法では、関数が呼び出されていないか、ビューに画像が表示されません。ほとんどのコンソール出力はありません。

これを実装した素晴らしい例がありますか?私はこれまでのところコンポーネントイベントしか見つけません。

幸運を祈り、 ダニエル

答えて

0

あなたは煎茶MVCアーキテクチャを使用していますか?私はあなたがあなたのコードを見ていると推測しています。

あなたがいる場合は、あなたがapp/store/Images.jsでお店を定義し、あなたがその店を持っているあなたのapp.jsファイルで言う必要があります。今、あなたはその店を定義し、あなたのapp.jsにそれが含まれていることを

Ext.application({ 
    name: 'Photoalbum', 
    stores: ['Images'] 
}); 

ファイルには、その名前を使用して、いつでもそれにアクセスすることができます。

{ 
    xtype: 'list', 
    store: 'Images', 
    ... 
} 

あなたはその店のインスタンスを再作成することはありません。一度だけ(アプリケーションによって)作成してから、ストアの文字列バージョンを使用することができます。

また、簡単に言えば、コンストラクタをオーバーライドすることは非常に悪い習慣です。代わりにinitializeメソッドをオーバーライドする必要があります。

関連する問題