2012-02-16 20 views
0

私はイントラネットのコンテキストでZend + Dojoフォームを使用しています。選択された状態がフォーム上で変更されたときに郡のリストを更新する必要があります。 HTMLでは、jsonレスポンスを解析するだけで(またはオプションのHTMLフラグメントを提供する)、selectのinnerhtmlを更新します。しかし、Dojoでこれを行うことは、非常に複雑であることが判明しています。Dojo Dijit FilteringSelectのストアを非同期データで更新する

つまり、フォームフィールドにonBlurの更新を設定できる汎用メソッドを定義しました。これは、関数の引数を使ってデータベースを呼び出すコントローラアクションにリンクし、シングルトン応答(すでに処理済み)またはリスト応答を取得します。リストを返す場合、そのリストでselectのオプションを変更する必要があります。

これまでのところ、これまでのところうまくいきました。私たちはresponse.dataの素敵なリストで有効なjson応答を取得します。ここに問題があります。既存のストアを更新するだけで(検査では_comboBoxDataStoreであることがわかります)別の種類のストアでselectを宣言することはできません。なぜなら、それは自動的に生成されるからです。

強制的にストアのスワップを強制する方法はありますか?主なキーは、私が行うことは何でもInternet Explorerで動作することです。 Firefoxの私の使用は、私が扱っているオブジェクトのより良い見識を可能にするだけです。

追加の質問として、_comboBoxDataStoreを更新できない理由を知っている人はいますか?他のフレームワークでは、例えばextJSのような店舗のシームレスな更新が可能です。コンボボックスへの制限を設計することの背後には何らかの理由がありますか?それで、未加工のHTMLから一歩踏み出すことはできません。または、難解なオブジェクトのリストをじゃまにすることを含まない明らかな解決策が欠けていますか?

答えて

0

このように、これは可能ですが、チュートリアルはありませんが、実際にどれだけ簡単かを示しています。

これはどこかにあることを確認してください:

dojo.require("dojo.data.ItemFileWriteStore"); 

その後、関係なく、あなたのFilteringSelectのはあなたをされて入ってきたかの次の操作を行うことができます:あなたは_comboBoxDataStoreの作成時に制御を持っている場合は

newStore = new dojo.data.ItemFileWriteStore({ 
    data:{ 
     identifier: 'id', 
     label: 'name', 
     items: response.data 
    } 
}); 

filteringSelect.store = newStore; 
filteringSelect.startup(); 
0

、そのストアでclearOnCloseをtrueに設定することができます。そのストアを閉じて、新しいデータにurlまたはdata属性を設定できます(clearOnCloseがdojo 1.4以降でのみサポートされている後にデータ属性を使用することに注意してください)。これは自動的例えば、新しいデータ

でcombobx /選択ウィジェットを更新します、以下を参照してください http://soularis999.blogspot.com/2011/03/reloading-dojodataitemfilereadstore.html

あなたがclearOnCloseを設定することができない場合(原因Zendのフレームワークにそれを修正するためのオプションなしでそれを所有していますビヘイビア)では、新しいデータストアを作成し、コンボボックスのデータストアを新しく作成したデータストアに設定することができます。 dijit filteringselectとcomboboxは、変更可能なストア属性を提供します。

まったく別のアプローチとして、このような用途にDojoフィルタウィジェットの「クエリ」属性を使用して検索することができます。これは非常に役立ち、必要なコードと管理の量を削減します。

たdijit FilteringSelectのはあるかもしれないような状態がFilteringSelectの http://livedocs.dojotoolkit.org/dijit/form/FilteringSelect

のクエリフィルタを変更することで、国の選択に基づいてどのように変化するかの例については、以下のURLはまた、あなたのユースケース記述から、それが聞こえるを参照してください。コンボボックスよりも優れたウィジェットの選択(それは郡のリストなので、リストにない郡をユーザーが入力できるようにしますか?) RiverCのポストにコンボを更新するための私の方法に基づく

+0

既にfilteringSelect!を使用しています。しかし、私はフレームワークの変更を伴うので、私はそれの作成を変更することはできません。 –

1

は次のように正常に動作します:

, updateData : function(data) { 
    var storeData = {data: data, id:'attrFilterStore'}; 
    var newStore = new dojo.data.ItemFileWriteStore({data: data}); 
    this.element.store = newStore; 
    this.element.startup(); 
} 

this.elementは」FilteringSelectのオブジェクトへの参照です。
メソッド "updateData"は、RiverCが投稿した構造を持つJSONを受け取るajaxリクエストからのコールバック関数です。

0

あなたも... fldoptionsを移入する必要が新しいデータである

var fldSelect = dijit.byId("fieldSelect"); 
fldSelect.options = fldoptions; 
fldSelect.startup(); 

をオプションを使用することができます。留意してください:fldSelect.startup()に電話しないでください。そうしないと、データは更新されません。

関連する問題