Ext.js5引用和引用持有者(1)

1、referenceHolder :布尔值
如果是true,这个容器会在层次结构中被标记为一个点,给项目建立一个引用配置。如果有控制器管理,这个容器会自动变成referenceHolder (参考/引用持有者),更详细的内容得看Ext.container.Container。
默认设置为true
2、reference(来自Ext.container.Container中的介绍)
References and Reference Holders
Reference Holders用于保持子组件的references引用在层级结构内。这个功能声明容器和他的子组件之间的封装引用关系。例子如下:

Ext.define('Login', {
    extend: 'Ext.window.Window',

    // This config is not compatible with the more common "controller" config
    // used to specify a ViewController for the view. When a ViewController is
    // specified it effectively acts as the "reference holder" for the view. In
    // this example we simply mark this container as the reference holder for
    // demonstration purposes.
    //大意是:这个例子我们直接简单粗暴的把容器设置成了引用持有者,而不是弄一个控制器(这个区别看第三段代码)
    referenceHolder: true,

    title: 'Login',
    items: [{
        xtype: 'form',
        items: [{
            xtype: 'textfield',
            reference: 'username', // 给引用持有者声明了一个引用
            name: 'username',
            fieldLabel: 'Username'
        }, {
            xtype: 'textfield',
            reference: 'password', // A named reference to be held on the referenceHolder
            name: 'password',
            fieldLabel: 'Password'
        }] 
    }] 
});
var w = new Login();
console.log(w.lookupReference('password')); // The password field

引用持有者(在这里我觉得应该指定义的Login)是被封装好的,因此引用只会加到组件层次中理他最近的那个引用持有者上。

var ct = new Ext.container.Container({
    referenceHolder: true,
    items: [{
        xtype: 'container',
        referenceHolder: true,
        reference: 'innerCt1',
        items: [{
            xtype: 'component',
            reference: 'a',
            id: 'a1'
        }, {
            xtype: 'component',
            reference: 'b',
            id: 'b1'
        }]
    }, {
        xtype: 'container',
        referenceHolder: true,
        reference: 'innerCt2',
        items: [{
            xtype: 'component',
            reference: 'a',
            id: 'a2'
        }, {
            xtype: 'component',
            reference: 'b',
            id: 'b2'
        }]
    }]
});
// The main container will not have references to a/b, each innerCt will
console.log(ct.lookupReference('a'), ct.lookupReference('b'));
var inner1 = ct.lookupReference('innerCt1');
var inner2 = ct.lookupReference('innerCt2');

console.log(inner1.lookupReference('a').id, inner1.lookupReference('b').id);
console.log(inner2.lookupReference('a').id, inner2.lookupReference('b').id);  

如果视图有控制器,那么这个视图会自动变成一个引用持有者。引用也会同时在视图和控制器中有效。

Ext.define('ProfileController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.profile',

    init: function() {
        console.log(this.lookupReference('firstName'));
    }
});

Ext.define('Profile', {
    extend: 'Ext.form.Panel',
    controller: 'profile',
    items: [{
        xtype: 'textfield',
        reference: 'firstName',
        fieldLabel: 'First Name'
    }]
});

new Profile(); 

再来一个比较简单的例子,这是状态绑定的代码:

Ext.define('KitchenSink.view.binding.ComponentState', {
    extend: 'Ext.panel.Panel',
    xtype: 'binding-component-state',
    width: 350,
    layout: 'anchor',
    viewModel: true,
    title: 'Sign Up Form',
    bodyPadding: 10,

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

还有这样的用法,绑定状态。效果图如下:
这里写图片描述
这里写图片描述

感慨一下,这样的排版真的太漂亮了吧!感动感动!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值