清除基于记录禁用表单元素的方法

时间:2017-05-19 06:32:44

标签: extjs

我的记录有布尔值(例如'可编辑'),并且应根据这些值禁用某些表单字段。

是否有比具有更改侦听器的隐藏字段更简洁的方法,它会根据newValue逐个禁用表单字段?

这就是我所拥有的:

xtype: 'hiddenfield',
name: 'Editable',
listeners:{
    change:function(field, newValue) {
        field.nextSibling('[name=Name]').setDisabled(!newValue);
        field.nextSibling('[name=Gender]').setDisabled(!newValue);
        ...
    }

但是现在记录中有八个不同的布尔值,并且基于其中三个禁用了一些表单字段,我正在寻找一种更方便的方法,我可以直接在该字段中编码。

3 个答案:

答案 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}'
    }
}]

如果EditablebutNotReally都为假,则会停用文本字段。

答案 2 :(得分:0)

{                                                                                
  xtype : 'numberfield',
  fieldLabel : 'Number of people'  
  allowBlank : false,
  disabled : record.get('isEnabled') // returns bool value
}

您可以尝试为每个元素禁用。