2012-02-29 8 views
3

私は、サーバー側から取得した値に基づいてUIコンポーネント(テキストフィールド、コンボボックスなど)を表示する必要があるアプリケーションに要件があります。正確に言えば、私はページ上にコンボボックスを持っています。ユーザーは、選択した値をサーバーに送信して、表示する必要がある情報を取得するために必要な値を変更します。 MVCを使用せずに、私は、私は、サーバーから戻ってデータを取得すると(「datachanged」イベントを別のストア Extjs MVC - コントローラーにストアイベントを設定する

  • を(loadメソッドを使用して)リフレッシュユーザーがコンボボックスの値を変更する

    1. 以下のようにそれを実装しました)私は、データの読み取りと作成

    は、今私はExtJSのMVCを使用しようとしていますUIコンポーネントを、私は二つの質問

    を持って
    1. 私は、コントローラにではなく、関連付けられているストアにアクセスするにはどうすればよいですネcessarilyビューから任意のUIコンポーネントへ
    2. は、どのように私はちょうどビューから我々のセットアップイベントのような(コントロール機能で)コントローラ内の店舗のイベントは、私は店からセットアップイベントにしたいセットアップすることができます

    コード以下のようなコントローラに「datachanged」のような -

    this.control({ 
        'viewport > #content-panel' : { 
         render : this.createMainTabs 
        } 
    }); 
    
  • 答えて

    1

    をちょうどthis.getStore('StoreName')を使用するコントローラでストアオブジェクトを取得するには、デフォルトでは各店舗が独自のインスタンスを持っており、実際にそれがどのUIコンポーネントあなたにバインドされますかどうかは関係ありません。持ってる。

    ストアオブジェクトを取得したら、任意の方法でストアイベントを購読できます。私は通常好きです

    store.on('load', {...}) 
    

    また、私はビューコードからUIの何も変更しません。私はこのすべてのカスタマイズをコントローラコードに入れます。

    2

    シャーの返信に加えて、あなたのコントローラーにあなたのストアのイベントハンドラーをセットアップすることができます。

    this.control({ 
        '#myCombo' : { 
         afterrender : this.setupStoreListeners 
        } 
    }); 
    
    .... 
    
    setupStoreListeners: function(combo){ 
        var store = combo.store; 
        store.on('datachanged', //.....); 
    } 
    

    そして、もう一つのSHAが書いたように、あなたは常に名前で店を得ることができるが、私は共有する必要があるとき、私はこれだけを使用します。たとえば、あなたがこのように書くことができるので、店舗でのコンボボックスを持っています複数のコントローラ間のストアインスタンス。 1台のコントローラにのみこのストアが必要な場合は、このコントローラに保存してください。

    setupController: function(){ 
        this.myStore = this.getCombo().store; // now you could use this.myStore anywhere you need 
    
    } 
    
    +0

    私はこのことを正確に探していました。ありがとう@innerJL – sErVerdevIL

    関連する問題