Ext.form.ComboBox加载json时刻默认选中的解决

先上效果图,已在Firefox3.5、IE7、Chrome3中测试正常

完整应用和代码请转到 http://www.iteye.com/topic/553020

 

重写combo的setValue

Ext.override(Ext.form.ComboBox, {
      setValue : function(node) {
        if (typeof node == "object") {
          // 当node为object对象时
          this.lastSelectionText = node.text;
          this.setRawValue(node.text);
          if (this.hiddenField) {
            this.hiddenField.value = node.id;
          }
          this.value = node.id;
          return this;
        } else {
          // 当node为文本时
          var text = node;
          if (this.valueField) {
            var r = this.findRecord(this.valueField, node);
            if (r) {
              text = r.data[this.displayField];
            } else if (Ext.isDefined(this.valueNotFoundText)) {
              text = this.valueNotFoundText;
            }
          }
          this.lastSelectionText = text;
          if (this.hiddenField) {
            this.hiddenField.value = node;
          }
          Ext.form.ComboBox.superclass.setValue.call(this, text);
          this.value = node;
          return this;
        }
      }
    })

 为什么要这样重写请参考ExtJS3 下拉树TreeComboBox的修改

然后在传递过来的json中改为

{
  'success' : true,
  data : {
    'yhId' : 227,
    'yhXm' : '赵刚',
    'yhXh' : {text: '赵刚',id: '227'},
  }
}

 yhXh传递过来不再是文本或数字,而是一个object,为了与下拉树的统一,这里使用text和id来命名文本和参数值

这样在combo默认调用setValue的时候就会自动将值写入到选择框内,但是这只解决了初值赋予的问题,因为我的combo内的选项是自expand的时候才加载的,那么怎样在expand的时候也默认选中默认的选项呢?

  xtype : 'combo',
  id : 'Ext.Strong.tyh.combo.yhXh',
  fieldLabel : '显示在',
  hiddenName : 'yhXh',
  allowBlank : false,
  mode : 'remote',
  readOnly : true,
  triggerAction : 'all',
  store : new Ext.data.JsonStore({
        url : '<@s.url action="tyh_LieBiao_XianShi!json"/>',
        fields : new Ext.data.Record.create(['yhXm', 'yhId']),
        root : 'list',
        // 设置监听 当加载完成后选中当前记录
        listeners : {
          load : function() {
            var comb = Ext.getCmp('Ext.Strong.tyh.combo.yhXh');
            comb.setValue(comb.hiddenField.value);
          }
        }
      }),
  editable : false,
  valueField : 'yhId',
  displayField : 'yhXm'

 修改store的默认load监听事件,在combo expand的时候重新setValue一下,由于这里set进去的不再是object对象,所有会调用正常的set过程将选项选中

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值