はじめに ExtJS は、このようなページを変更する際に値を代入するのに非常に便利です。本文中の 1.2.1 のコードからもわかるように、1 行のコードで実行できますが、これは通常の場合です。テキストボックスなどのコントロール。 ComboBox の場合はそれほど単純ではありません... バージョン Ext JS Library 3.0.0 テキスト 1. 問題 1.1 スクリーンショット 🎜> 1.2 コード 1.2.1 フロントエンド コード コードをコピー コードは次のとおりです: <div class="codebody" id="code76235">// <br>function ExtStore(url) <br>{ <br>return new Ext.data.Store({ <br>proxy: new Ext. data .HttpProxy({ <br>url: url <br>})、<br>reader: new Ext.data.JsonReader({ <br>totalProperty: 'count', <br>root: 'result' <br> } , <br>[ <br>{ 名前: 'Id' }, <br>{ 名前: '名前' } <br>]) <br>}); <br>} <br><br> onReady (function() { <br>Ext.QuickTips.init(); <br>Ext.form.Field.prototype.msgTarget = 'side'; <br><br>var store1 = ExtStore('combox.aspx? <br>var store2 = ExtStore('combox.aspx?method=GetCitys'); <br><br>var combo2 = ComboBox('combo2','第 2 レベルのメニュー',store2); <br>var combo1 = new Ext.form.ComboBox({ <br>mode: 'remote', <br>fieldLabel:'First level menu', <br>name:'combo1', <br>editable : false, <br>typeAhead: true、<br>triggerAction: 'all'、<br>displayField:'Name'、<br>valueField:'Id'、<br>selectOnFocus:true、<br>store:store1、<br>listeners : { <br>'select': function(combo, Record){ <br>var id = Record.get('Id'); <br>if(id) <br>{ <br>//Clear第 2 レベルのメニュー オプション<br>combo2.setRawValue(''); <br>store2.proxy = new Ext.data.HttpProxy({ <br>url:String.format('combox.aspx?method=GetCitys&Province={ 0}' ,id) <br>}); <br>store2.load() <br>} <br>} <br>}); <br><br>var form1 = new Ext .FormPanel( { <br>layout: 'form', <br>autoHeight: true, <br>frame: true, <br>renderTo: Ext.getBody(), <br>title: '<center style=" curor:hand " onclick="window.location.reload();">フォーム コントロール</center>', <br>style: 'margin-left:auto;margin-right:auto;width:500px;margin- top: 8px;', <br>//ラベルの配置を設定します<br>labelAlign: 'right', <br>//ラベルの幅を設定します<br>labelWidth: 170, <br>//ボタンの配置を設定します<br> buttonAlign:'center', <br>//デフォルトの要素属性設定 <br>defaults:{ width:180 }, <br>items: [ <br>combo1, <br>combo2 <br>] <br> }) ; <br><br>//データの読み込み<br>Ext.Ajax.request({ <br>url: 'combox.aspx?method=Detail', <br>method: 'GET', <br> callback: function (options, success, response) { <br>if(success && response.status == 200){ <br>//バッチで値を割り当てます<br>form1.form.setValues(Ext.util. JSON.decode(responseText)) <br>} <br>} <br>}); <br><br><br><br>コピーcode<br><br> </div> コードは次のとおりです:<br><div class="codebody" id="code67949"> <br>static IList<Combox> 州 = new List<Combox>(); <br>static IDictionary<int, Combox>(); combox() <br>{ <br>Provinces.Add(new Combox() { Id = 1, 名前 = "湖南省" }); <br>Provinces.Add(new Combox() { Id = 2, 名前 = "広東省" }); <br><br>Citys.Add(1, new Combox() <br>{ <br>ID = 1, <br>名前 = "長沙市" <br>}); 🎜><br>Citys.Add(2, new Combox() <br>{ <br>Id = 1, <br>Name = "岳陽市" <br>}); (3, new Combox() <br>{ <br>Id = 2, <br>名前 = "深セン市" <br>}); <br><br>Citys.Add(4, new Combox() <br>{ <br>Id = 2, <br>名前 = "珠海市" <br>}) <br>} <br><br>protected void Page_Load(object sender, EventArgs e) <br>{ <br><br>} <br><br>/// <summary> <br>/// すべての州のデータを取得します<br>/// <br>/// <returns> </returns> <br>public void GetProvinces() <br>{ <br>Response.Write(new StringBuilder().Append("{count:") <br>.Append(Provinces.Count) <br> .Append(",result:") <br>.Append(JavaScriptConvert.SerializeObject(Provinces)) <br>.Append('}') <br>.ToString()); >/// <summary> <br>/// 州の下の都市データを取得します<br>/// </summary> <br>/// <returns></returns> void GetCitys() <br>{ <br>IList<Combox> result = new List<Combox>(); <br>int 州 = Convert.ToInt32(Request.QueryString["Province"]); KeyValuePair<int, Combox> 都市のデータ) <br>{ <br>if (data.Value.Id == 州) <br>result.Add(new Combox() { Id = data.Key, Name = data . Value.Name }); <br><br>} <br>Response.Write(new StringBuilder().Append("{count:") <br>.Append(result.Count) <br>.Append( " ,result:") <br>.Append(JavaScriptConvert.SerializeObject(result)) <br>.Append('}') <br>.ToString()); <br>} <br><br>パブリック オーバーライド文字列Detail() <br>{ <br>IDictionary<string int> result = new Dictionary<string int>(); <br>result.Add("combo1", 2); combo2", 2); <br>return JavaScriptConvert.SerializeObject(result); <br>} <br><br>class Combox <br>{ <br>public int Id { get; set; } <br>public string名前 { get; set; } <br>} <br><br> <br>1.3 コードの説明 <br> 1.3.1 バックグラウンド コードで使用されるデータはテスト専用です <br> 1.3.2 目的: 広東省デフォルトでは省 - 珠海市が選択されています <br><br> 2. 問題分析 <br><br> ComboBox の読み込みの遅延が原因です。 <br><br> 3. 解決策 <br> 2.1 割り当て後に、ID の代わりに対応する名前を ComboBox に表示させます </string></string> </div> Ext.Ajax.request が実行される前に、「store1.load();」を追加するだけです。 <br><br> 2.2 ComboBox のカスケード割り当て <br> カスケード割り当ては、手動でイベントをトリガーする必要があります。結果を取得するまでに時間がかかりました。 <br> 2.2.1 最初のステップは、第 1 レベルのメニュー選択イベントを手動でトリガーすることです <br><br><br><br><br>コードをコピーします <br><br><br> コードは次のとおりです次のように: <img src="http://files.jb51.net/upload/201006/20100613002750775.png" border="0" alt="ExtJS はカスケード menu_extjs のデフォルト値を設定します" ><br> <br>store1.load(); <br>//データをロード<br>Ext.Ajax.request({ <div class="codetitle">url: 'combox.aspx?method=Detail', <span>method: 'GET ', <a style="max-width:90%" data="45923" class="copybut" id="copybut45923" onclick="doCopy('code45923')">callback: function (options, success, response) { <u>if(success && response.status == 200){ </u>//バッチで値を割り当てる</a>form1.form.setValues(Ext .util.JSON.decode(response.responseText)) </span>var comboValue1 = combo1.getValue(); </div>var selectRecord <div class="codebody" id="code45923">store1.each(function(record); { <br>if(record.data .Id == comboValue1) <br>selectRecord = レコード <br>}); <br>combo1.fireEvent('select',combo1,selectRecord); >} <br>}); <br><br> <br> ここで、手動トリガーにはレコードのパラメーターを渡す必要があることがわかります。そうでない場合、値は見つかりません。 <br> 2.2.2 カスケードの変更<br><br><br><br><br>コードをコピー<br><br><br> コードは次のとおりです:<br><br> <br>store2 .load ({ </div>callback :function(r,options,success){ <br>if(success){ <br>if(IsLoad) <br>{ <div class="codetitle">combo2.setValue(comboValue2); <span> IsLoad = false; <a style="CURSOR: pointer" data="85444" class="copybut" id="copybut85444" onclick="doCopy('code85444')">} <u>} </u>} </a>});<br> Code description: <br> a). IsLoad is a global variable, used to control the default value to be set only once <br> b). It is easy to make the mistake of triggering menu one and assigning a value directly to menu two. Pay attention here Because menu two has not been loaded yet, if you write the assignment directly after the trigger event, it will still be a number. <br><br> IV. Code download<br><a href="http://xiazai.jb51.net/201006/yuanma/combox2010-6-12.rar" target="_blank">/201006/yuanma/combox2010-6-12.rar</a><br>End<br><br> Pay attention to the code such as PageBase, ComboBox( Codes such as 'combo2', 'secondary menu', store2) can be found in my previous articles. When you encounter a problem, besides complaining, you can also choose to eliminate it. The pleasure after solving it is very profound. This problem was solved very early and I never had time to write about it. I still remember it clearly :) <br><br><br></span> </div>