我的记录有布尔值(例如'可编辑'),并且应根据这些值禁用某些表单字段。
是否有比具有更改侦听器的隐藏字段更简洁的方法,它会根据newValue逐个禁用表单字段?
这就是我所拥有的:
xtype: 'hiddenfield',
name: 'Editable',
listeners:{
change:function(field, newValue) {
field.nextSibling('[name=Name]').setDisabled(!newValue);
field.nextSibling('[name=Gender]').setDisabled(!newValue);
...
}
但是现在记录中有八个不同的布尔值,并且基于其中三个禁用了一些表单字段,我正在寻找一种更方便的方法,我可以直接在该字段中编码。
答案 0 :(得分:1)
您可以像这样更新表单视图模型数据
form.getViewModel().set('record', record)
并绑定字段值并像这样禁用
{
xtype:'textfield',
name: 'Name',
value: '',
bind: {
disabled: '{!record.Editable}',
value: '{record.Name}'
}
}
检查this update是否与数据绑定有关。
答案 1 :(得分:1)
绑定到viewModel数据是您正在寻找的解决方案。 我稍微调整了你的评论中的小提示,向你展示了一个将你的商店中的记录添加到表单的viewModel的工作示例。 https://fiddle.sencha.com/#view/editor&fiddle/1vuo
除了在你的按钮上调用form.loadRecord()之外,你还需要将viewModel数据设置为相同的记录:
{
text: 'Load Homer',
handler: function (btn) {
var homerRecord = store.getAt(0);
btn.up('form').loadRecord(homerRecord);
btn.up('form').getViewModel().set('record', homerRecord);
}
}
通过它,您将能够引用组件上的记录字段,特别是您设置的Editable
字段:
viewModel: {
data: {
record: null
}
},
items: [{
xtype: 'textfield',
name: 'Name',
value: '',
bind: {
disabled: '{!record.Editable}'
}
}]
如果您有更复杂的禁用组件的要求,例如,应根据记录中两个字段的某种组合禁用该字段,您可以将formulas: {}
添加到viewModel。
例如,给出记录:
{
Name: 'Homer Simpson',
Editable: false,
butNotReally: true
}
您的viewModel可能如下所示:
viewModel: {
data: {
record: null
},
formulas: {
disableNameField: function (get) {
return !get('record.Editable') && !get('record.butNotReally');
}
}
},
items: [{
xtype: 'textfield',
name: 'Name',
value: '',
bind: {
disabled: '{disableNameField}'
}
}]
如果Editable
和butNotReally
都为假,则会停用文本字段。
答案 2 :(得分:0)
{
xtype : 'numberfield',
fieldLabel : 'Number of people'
allowBlank : false,
disabled : record.get('isEnabled') // returns bool value
}
您可以尝试为每个元素禁用。