【问题标题】:SetValue in beforerender listener not updating anythingbeforerender 侦听器中的 SetValue 不更新任何内容
【发布时间】:2019-12-09 01:47:15
【问题描述】:

我正在使用 ExtJS,我很难在 combofield 中设置一个值。

渲染前 事件中,我尝试使用提供的方法 setValue 设置组合框的值。但是,没有任何变化。

 beforerender : function(field) {
                          field.setValue(2018);
                          console.log("I'm here !");

              },

我会列出我已经尝试过的事情:

  1. 将值设置为字符串而不是数字 (= 2018+"")
  2. 设置值后使用 setVisible() (这可行,但布局混乱)
  3. 使用正确的属性手动设置值 (= field.value =2018)
  4. 使用其他事件,例如焦点(请注意,对于此事件,setValue 方法确实有效)

我想补充一点,有另一个组件继承自该组件,这可能会导致引用问题。

是否可以在 before render 事件中使用 setValue

【问题讨论】:

  • 你试过field.value = 2018中的beforerender吗?

标签: extjs listener setvalue


【解决方案1】:

您的代码看起来没问题,当调用 beforerender 侦听器时,您的组合框的存储中有数据?请记住,当您在组合框上调用 setValue() 时:

对于每个值,如果在 store 中找到了一条基于 valueField 匹配的记录,那么该记录的 displayField 将显示在该字段中

因此,如果在您的组合框配置中,您的 valueField 设置为 valueField:year,并且您调用 setValue(2018),组合框将在其存储中查找类似 @​​987654325@ 的记录

例子:

var states = Ext.create('Ext.data.Store', {
  fields: ['abbr', 'name'],
  data: [{
    "abbr": "AL",
    "name": "Alabama"
  }, {
    "abbr": "AK",
    "name": "Alaska"
  }, {
    "abbr": "AZ",
    "name": "Arizona"
  }]
});

Ext.create('Ext.form.ComboBox', {
  fieldLabel: 'Choose State',
  store: states,
  queryMode: 'local',
  displayField: 'name',
  valueField: 'abbr',
  listeners:{
    beforerender:function(cmp){
      cmp.setValue('AK');
    }
  },
  renderTo: Ext.getBody()
});

【讨论】:

  • valueField 是按您提到的那样编写的。但是,没有任何改变。我还尝试在字段集中设置其他组合框的值,但也没有成功。最后,如果我在控制台中打印组合,然后在控制台中设置值,则值会更新。为什么会这样?
  • 如果没有你的所有代码,你很难知道为什么会发生这种情况,你能做一个小提琴fiddle.sencha.com 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2021-10-06
  • 2018-04-06
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多