【发布时间】:2020-12-08 00:26:28
【问题描述】:
我在表单中使用了radiogroup,我注意到当我选择其中一个单选按钮时,值(绑定值)没有更新。
这是一个小例子:
Ext.create({
xtype: 'container',
renderTo: Ext.getBody(),
items: [{
xtype: 'formpanel',
viewModel: {
data: {
myValue: 3
}
},
items: [{
xtype: 'displayfield',
label: 'This is the value of myValue:',
bind: '{myValue}'
}, {
xtype: 'textfield',
label: 'Update myValue:',
bind: '{myValue}'
}, {
xtype: 'radiogroup',
vertical: true,
label: 'Click a radio button:',
bind: '{myValue}',
items: [{
label: 'One',
value: 1
}, {
label: 'Two',
value: 2
}, {
label: 'Three',
value: 3
}, ]
}]
}]
});
我用一个数据值创建了一个简单的viewModel:myValue: 3。这绑定到所有表单元素:radiogroup、textfield 和 displayfield。
我希望当我单击其中一个单选按钮时,displayfield 会更新其值。当您输入textfield 时,displayfield 值会更新,但radiogroup 不会更新。
似乎radiogroup 仅在初始化时使用其绑定值,但它不会注意到何时更新,也不会自行更新。
我做错了什么?为什么单击单选按钮时绑定值没有更新?
这是 Sencha Fiddle 上的一个示例:https://fiddle.sencha.com/#view/editor&fiddle/389i
更新:我找到了一个将change 监听器添加到radiogroup 的解决方案。好吧,这修复了在您单击单选按钮时更新myValue 的问题。当myValue 在其他地方更新时(例如在textfield 中),我需要另一个侦听器来更新radiogroup。
这可以满足我的需要,但为什么我需要添加一个change 监听器?为什么radiogroup 不能正确绑定到{myValue}?
listeners: {
change: function(field, val) {
let vm = field.lookupViewModel();
vm.set('myValue', val);
}
}
这是应用此更新的一个小技巧:https://fiddle.sencha.com/#view/editor&fiddle/389k
【问题讨论】:
标签: extjs radio-group extjs7