[ExtJS] reference 引用查找器 与viewModel

这篇博客探讨了ExtJS中reference属性如何影响控件与其viewModel之间的交互。当一个控件具有reference属性,例如一个textfield,其在viewModel中会自动生成对应的值。如果尝试覆盖这个值, viewModel会根据控件的最新状态进行更新,允许其他控件直接绑定到reference名,如isAdmin,即使vm中没有显式声明。

reference 作为元素的查找标识,经常在项目中使用。

但是今天发现一件事:

有reference属性的控件,在其viewModel中会自动生成一个值。

示例:

{
    xtype:'container',
    id:'demo',
    viewModel:{},
    items:[
        {
            xtype:'textfield',
            reference:'A'
        }
    ]
}

为一个textfield声明 reference 属性 A,此时如果获取viewModel的data 可以看到

Ext.getCmp('demo').getViewModel().data;//获取 viewModel的data值
// A: {value: null}   控制台输出

发现viewModel 自动追加了一个 key为 的值。

如果我们在其viewModel本身就声明一个 keyA的值,且给textfield赋一个值为b

{
    xtype:'container',
    id:'demo',
    viewModel:{
        data:{
            A:'a'//声明A的值为a
        }
    },
    items:[
        {
            xtype:'textfield',
            value:'b',
            reference:'A'
        }
    ]
}

再次获取viewModel中的A的值

Ext.getCmp('demo').getViewModel().data;//获取 viewModel的data值
// 控制台输出 A: {value:‘b'}

发现输出的还是 {value:'reference控件所对应的值'} 

若是手动更新下viewModel中的 A

Ext.getCmp('demo').getViewModel().set('A','手动更新的a');
//获取vm的data
A: '手动更新的a'

而此时若是再给 textfield控件赋值

Ext.getCmp('demo').getInnerAt(0).setValue('更新b');
//控制台再输出 vm的data
A:{value:'更新b'}

官方解释

当为组件分配一个 reference用于标识的组件时,该组件将在ViewModel中发布其某些关键属性

示例:

Ext.create('Ext.panel.Panel', {
    title: 'Sign Up Form',

    viewModel: {
        type: 'test'
    },

    items: [{
        xtype: 'checkbox',
        boxLabel: 'Is Admin',
        reference: 'isAdmin'
    },{
        xtype: 'textfield',
        fieldLabel: 'Admin Key',
        bind: {
            disabled: '{!isAdmin.checked}'
        }
    }]});

从上述例子可以发现:

虽然vm中未声明isAdmin, 但由于有控件声明了reference为isAdmin,所以其他控件在绑定时可以直使用isAdmin.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

29号同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值