ExtJs按模型设置RadioGroup Item

时间:2017-11-06 13:52:42

标签: extjs extjs5

我的viewmodel设置单选按钮组的选定项目时遇到一些问题。是否可以通过元素名称设置所选值?我希望hat viewmodel gender = true匹配第二个(' female')单选按钮。

Ext.application({    
    launch: function () {

        var form = Ext.widget('form', {

            renderTo: Ext.getBody(),
            viewModel: {
                data: {
                    gender: true
                }
            },

            items: [{
                xtype: 'radiogroup',
                fieldLabel: 'Gender',
                name: 'rbGender',
                defaults: {
                    flex: 1
                },
                layout: 'hbox',
                items: [{
                    boxLabel: 'Male',
                    name: 'gender',
                    inputValue: false,
                    id: 'radio1'
                }, {
                    boxLabel: 'Female',
                    name: 'gender',
                    inputValue: true,
                    id: 'radio2'
                }]
            }]

        });

    }
});

1 个答案:

答案 0 :(得分:3)

不,这对于viewModel是不可能的。 viewModel始终依赖于bind配置,例如

bind:' {gender}',

你不想绑定无线电控制,你想绑定无线电组。您还想要做的是将radiogroup设置为simpleValue: true

工作示例:

viewModel: {
    data: {
        gender: false
    }
},

items: [{
    xtype: 'radiogroup',
    fieldLabel: 'Gender',
    name: 'rbGender',
    bind: '{gender}', // <- bind this field to the viewModel's "gender" value.
    simpleValue: true, // <- use a boolean, not an object.
    defaults: {
        flex: 1
    },
    ...

如果你想做#34;老派&#34;使用name的方式,您必须使用form.setValues()form.getValues()而不是viewModel。

在ExtJS 5.x中,simpleValue不可用且defaultBindProperty为空,因此您必须更改:

viewModel: {
    data: {
        gender: { // In ExtJS 5, radiogroups can only take objects, not simple values
            rbGender: false
        }
    }
},

items: [{
    xtype: 'radiogroup',
    fieldLabel: 'Gender',
    name: 'rbGender',
    bind: { // bind has to be a complex object, because defaultBindProperty is not available.
        value:'{gender}'
    },

    items: [{
        boxLabel: 'Male',
        name: 'rbGender', // <- tell the radiogroup to put the rbGender property into these checkboxes