最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ExtJS 設置級聯(lián)菜單的默認值

 更新時間:2010年06月13日 00:29:18   作者:  
ExtJS在修改這樣的頁面上賦值是很方便的,在正文中1.2.1代碼中可以看出,一行代碼就可以搞定,但這是對于普通控件而言,如文本框。對于ComboBox可沒這么簡單...
前言
   ExtJS在修改這樣的頁面上賦值是很方便的,在正文中1.2.1代碼中可以看出,一行代碼就可以搞定,但這是對于普通控件而言,如文本框。對于ComboBox可沒這么簡單...

版本
  Ext JS Library 3.0.0

正文
  一、問題
    1.1  截圖
      
    1.2  代碼
      1.2.1  前端代碼
復制代碼 代碼如下:

<script type="text/javascript">
//
function ExtStore(url)
{
return new Ext.data.Store({
proxy: new Ext.data.HttpProxy({
url: url
}),
reader: new Ext.data.JsonReader({
totalProperty: 'count',
root: 'result'
},
[
{ name: 'Id' },
{ name: 'Name' }
])
});
}

Ext.onReady(function() {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';

var store1 = ExtStore('combox.aspx?method=GetProvinces');
var store2 = ExtStore('combox.aspx?method=GetCitys');

var combo2 = ComboBox('combo2','二級菜單',store2);
var combo1 = new Ext.form.ComboBox({
mode: 'remote',
fieldLabel:'一級菜單',
name:'combo1',
editable : false,
typeAhead: true,
triggerAction: 'all',
displayField:'Name',
valueField:'Id',
selectOnFocus:true,
store:store1,
listeners: {
'select': function(combo, record){
var id = record.get('Id');
if(id)
{
//清空二級菜單選項
combo2.setRawValue('');
store2.proxy = new Ext.data.HttpProxy({
url:String.format('combox.aspx?method=GetCitys&Province={0}',id)
});
store2.load();
}
}
}
});

var form1 = new Ext.FormPanel({
layout: 'form',
autoHeight: true,
frame: true,
renderTo: Ext.getBody(),
title: '<center style="curor:hand" onclick="window.location.reload();">表單控件</center>',
style: 'margin-left:auto;margin-right:auto;width:500px;margin-top:8px;',
//設置標簽對齊方式
labelAlign: 'right',
//設置標簽寬
labelWidth: 170,
//設置按鈕的對齊方式
buttonAlign:'center',
//默認元素屬性設置
defaults:{ width:180 },
items: [
combo1,
combo2
]
});

//加載數(shù)據(jù)
Ext.Ajax.request({
url: 'combox.aspx?method=Detail',
method: 'GET',
callback: function (options, success, response) {
if(success && response.status == 200){
//將值批量賦值
form1.form.setValues(Ext.util.JSON.decode(response.responseText))
}
}
});
});
</script>

      1.2.2  后臺代碼
復制代碼 代碼如下:

static IList<Combox> Provinces = new List<Combox>();
static IDictionary<int, Combox> Citys = new Dictionary<int, Combox>();

static combox()
{
Provinces.Add(new Combox() { Id = 1, Name = "湖南省" });
Provinces.Add(new Combox() { Id = 2, Name = "廣東省" });

Citys.Add(1, new Combox()
{
Id = 1,
Name = "長沙市"
});

Citys.Add(2, new Combox()
{
Id = 1,
Name = "岳陽市"
});

Citys.Add(3, new Combox()
{
Id = 2,
Name = "深圳市"
});

Citys.Add(4, new Combox()
{
Id = 2,
Name = "珠海市"
});
}

protected void Page_Load(object sender, EventArgs e)
{

}

/// <summary>
/// 獲取所有省份數(shù)據(jù)
/// </summary>
/// <returns></returns>
public void GetProvinces()
{
Response.Write(new StringBuilder().Append("{count:")
.Append(Provinces.Count)
.Append(",result:")
.Append(JavaScriptConvert.SerializeObject(Provinces))
.Append('}')
.ToString());
}

/// <summary>
/// 獲取省下面的市區(qū)數(shù)據(jù)
/// </summary>
/// <returns></returns>
public void GetCitys()
{
IList<Combox> result = new List<Combox>();
int Province = Convert.ToInt32(Request.QueryString["Province"]);
foreach (KeyValuePair<int, Combox> data in Citys)
{
if (data.Value.Id == Province)
result.Add(new Combox() { Id = data.Key, Name = data.Value.Name });

}
Response.Write(new StringBuilder().Append("{count:")
.Append(result.Count)
.Append(",result:")
.Append(JavaScriptConvert.SerializeObject(result))
.Append('}')
.ToString());
}

public override string Detail()
{
IDictionary<string, int> result = new Dictionary<string, int>();
result.Add("combo1", 2);
result.Add("combo2", 2);
return JavaScriptConvert.SerializeObject(result);
}

class Combox
{
public int Id { get; set; }
public string Name { get; set; }
}

1.3  代碼說明
      1.3.1  后臺代碼中使用的數(shù)據(jù)僅用測試用
      1.3.2  意圖:加載的時候就默認選擇廣東省——珠海市

  二、問題分析

    ComboBox延遲加載導致。

  三、解決辦法
    2.1  讓ComboBox賦值后顯示對應的Name,而不是Id
      在Ext.Ajax.request執(zhí)行前加一句“store1.load();”即可。
      
    2.2  ComboBox級聯(lián)賦值
      級聯(lián)賦值可沒這么簡單了,需要手動觸發(fā)事件,這里嘗試了很長時間才出結果。
      2.2.1  第一步,手動觸發(fā)一級菜單選擇事件
復制代碼 代碼如下:

store1.load();
//加載數(shù)據(jù)
Ext.Ajax.request({
url: 'combox.aspx?method=Detail',
method: 'GET',
callback: function (options, success, response) {
if(success && response.status == 200){
//將值批量賦值
form1.form.setValues(Ext.util.JSON.decode(response.responseText))
var comboValue1 = combo1.getValue();
var selectRecord;
store1.each(function(record){
if(record.data.Id == comboValue1)
selectRecord = record;
});
combo1.fireEvent('select',combo1,selectRecord);
}
}
});

        這里發(fā)現(xiàn)手動觸發(fā)得自己傳入record的參數(shù),不然里面去不到值。
      2.2.2  修改級聯(lián)
復制代碼 代碼如下:

store2.load({
callback :function(r,options,success){
if(success){
if(IsLoad)
{
combo2.setValue(comboValue2);
IsLoad = false;
}
}
}
});

        代碼說明:
          a).  IsLoad是全局變量,用來控制僅設置一次默認值
          b).  很容易又會犯觸發(fā)菜單一就直接給菜單二賦值的錯,注意這里因為菜單二還沒有加載完,所有如果直接在觸發(fā)事件后面寫賦值,出來仍然是數(shù)字。

  四、代碼下載
/201006/yuanma/combox2010-6-12.rar
結束

  注意代碼中的如PageBase、 ComboBox('combo2','二 級菜單',store2)之類的代碼可以在我以前的文章里面找得到說明。遇到問題除了抱怨還可以選擇消滅,那種解決后的快感是非常深刻的,這個問題很早就解決了,一直沒時間寫,現(xiàn)在仍然記得清晰 :)


相關文章

  • 使用ExtJS技術實現(xiàn)的拖動樹結點

    使用ExtJS技術實現(xiàn)的拖動樹結點

    在本文將介紹TreePanel組件非常有意思的一個功能:結點拖放。要使TreePanel組件的結點可以拖放非常簡單,只需要將TreePanel類的enableDD選項參數(shù)設為true即可。當然,要想實現(xiàn)更復雜的功能,還需要配合其他的參數(shù)和事件。
    2010-08-08
  • Extjs TriggerField在彈出窗口顯示不出問題的解決方法

    Extjs TriggerField在彈出窗口顯示不出問題的解決方法

    解決Extjs TriggerField在彈出窗口顯示不出問題
    2010-01-01
  • ExtJs之帶圖片的下拉列表框插件

    ExtJs之帶圖片的下拉列表框插件

    ExtJs是一個非常好的客戶端JavaScript,他的很多空間都可以自定義而且也可以擴展。
    2010-03-03
  • ExtJs事件機制基本代碼模型和流程解析

    ExtJs事件機制基本代碼模型和流程解析

    最近開始自學ExtJs,下載了些視頻和上網(wǎng)搜了些相關文章和文檔準備好好學學,今晚第一次接觸ExtJs的事件機制,剛開始感覺有點暈,和以前所接觸的VB或是純的JAVASCRIPT的實現(xiàn)方式有些區(qū)別。根據(jù)一個例子,來分析和總結一下這個流程吧。
    2010-10-10
  • Extjs TimeField 顯示正常時間格式的代碼

    Extjs TimeField 顯示正常時間格式的代碼

    由后臺返回的json的日期時間格式中,往往都是 類似 "\/Date(1309200300000)\/"的日期時間格式,結果導致無法正常在TimeField中顯示
    2011-06-06
  • ExtJs設置GridPanel表格文本垂直居中示例

    ExtJs設置GridPanel表格文本垂直居中示例

    本文為大家詳細介紹下ExtJs如何設置GridPanel表格文本垂直居中,具體實現(xiàn)代碼及截圖如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • ExtJS Window 最小化的一種方法

    ExtJS Window 最小化的一種方法

    ExtJS 中Window的窗口最大化只需將maximizable屬性設置為true即可,點擊最大化按鈕就可以將窗體最大化,最小化的操作類似將minimizable設置為true,即可以看到窗體的最小化按鈕,但是點擊此按鈕并不會出發(fā)任何操作,Ext沒有為窗口預設最小化的任何操作,需要自己自定義最小化功能。
    2009-11-11
  • extjs每個組件要設置唯一的ID否則會出錯

    extjs每個組件要設置唯一的ID否則會出錯

    extjs每個組件要設置唯一的ID,否則會造成各種錯誤。EXTJS基本上是靠ID來識別組件的
    2014-06-06
  • Extjs中使用extend(js繼承) 的代碼

    Extjs中使用extend(js繼承) 的代碼

    Extjs中使用extend(js繼承) 的代碼,抄<深入淺出Extjs>書
    2012-03-03
  • ExtJs 學習筆記 Hello World!

    ExtJs 學習筆記 Hello World!

    最近學ajax,接觸到了Extjs這個強大的框架。我想通過我的學習筆記,最后可以讓大家上手在項目中使用Ext。首先我會寫一些基本的用于入門Ext的文章,打好基礎是很重要的。
    2008-12-12

最新評論

南城县| 新邵县| 江油市| 苏尼特左旗| 茂名市| 乐业县| 尼玛县| 汕头市| 文山县| 曲松县| 蓬莱市| 卢龙县| 潜江市| 大兴区| 象州县| 思南县| 晋城| 德昌县| 教育| 界首市| 梁平县| 旬邑县| 花莲市| 恩施市| 小金县| 伊吾县| 仙游县| 宜黄县| 东丰县| 安国市| 抚宁县| 神木县| 防城港市| 石屏县| 南川市| 保亭| 垫江县| 罗江县| 临江市| 毕节市| 长治县|