0

私の MVC アプリケーションでは、次のように定義されたコントローラーがあります。

Ext.define('NE.controller.MyController', {
    extend: 'Ext.app.Controller',
    stores : [...'StoreAgents'..],

    views: [ ...'MyView'...], // * alias w_view

    init: function() {
        this.control({
            'w_view': {
                render: function() { this.getStore('StoreAgents').load(); }
            }
        });
    }
});

ビュー MyView には、次のように定義されたコンボボックスがあります。

{
    xtype: 'combobox',
    name : 'id_agent',
    forceSelection: true,
    fieldLabel: 'Agent',
    store: 'StoreAgents',
    queryMode: 'local',
    displayField: 'name',
    valueField: 'id'
}

ビューがレンダリングされるたびにコンボボックスリストが更新されると思いますが、間違っていますか? アプリケーションがすべてのエージェント データを正しく返すリクエストを (firebug を介して) 起動したことを確認しても、現在、コンボボックスにはオプションがありません。

さらに、別のコントローラによって管理されている別のビューをブラウズするたびに、別のコントローラが別の StoreAgent を宣言し、その load() メソッドを呼び出すことに気付きました。

私は何が欠けていますか?ありがとうございました

編集: 店舗が であることに気付きました{buffered: true}。false に切り替えると、ストアは「datachange」イベントを発生させます。それ以外の場合はそうではありません。問題は、バッファリングが有効になっている場合、load() が「datachange」を起動しないのはなぜですか?

4

1 に答える 1

0

これは、フィルターで除外された状況が原因である可能性があります。ストアが読み込まれる前にコンボボックスに値が入力されている場合、値が存在する前にすべての値を除外するフィルターがストアに配置され、新しいレコードが追加されたときにも表示されません。これを試して。

init: function() {
        this.control({
            'w_view': {
                render: function() { this.getStore('StoreAgents').load(); 
                this.getStore('StoreAgents').clearFilter();}
            }
        });
    }
于 2013-01-28T14:26:05.073 に答える