博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
extjs5 一个容器中有几个组件公用一个控制器和一个模型
阅读量:6515 次
发布时间:2019-06-24

本文共 2600 字,大约阅读时间需要 8 分钟。

1 Ext.define('TestViewModel', {  2   extend: 'Ext.app.ViewModel',  3   4   alias: 'viewmodel.test', // connects to viewModel/type below  5   constructor: function(config){  6     //这里可以看出实例化了几次的 model  7     console.log(config);  8     this.callParent(config);  9   }, 10  11   data: { 12     firstName: 'John', 13     lastName: 'Doe' 14   }, 15  16   formulas: { 17     // We'll explain formulas in more detail soon. 18     name: function (get) { 19       var fn = get('firstName'), ln = get('lastName'); 20       return (fn && ln) ? (fn + ' ' + ln) : (fn || ln || ''); 21     } 22   } 23 }); 24  25 Ext.define('TestView', { 26   extend: 'Ext.panel.Panel', 27   layout: 'form', 28  29   requires: [ 30     'TestViewModel' 31   ], 32  33   // Always use this form when defining a view class. This 34   // allows the creator of the component to pass data without 35   // erasing the ViewModel type that we want. 36   viewModel: { 37     type: 'test'  // references alias "viewmodel.test" 38   }, 39  40   bind: { 41     title: 'Hello {name}' 42   }, 43  44   defaultType: 'textfield', 45   items: [{ 46     fieldLabel: 'First Name', 47     bind: '{firstName}' 48   },{ 49     fieldLabel: 'Last Name', 50     bind:{ 51       value: '{lastName}' 52     }  53   },{ 54     xtype: 'button', 55     text: 'Submit', 56     bind: { 57       hidden: '{!name}' 58     } 59   },{ 60     xtype: 'demo' 61   }] 62 }); 63  64 Ext.onReady(function () { 65   Ext.create('TestView', { 66     renderTo: Ext.getBody(), 67     width: 400 68   }); 69 }); 70  71  72 Ext.define('Demo', { 73   extend: 'Ext.panel.Panel', 74   layout: 'form', 75   alias: 'widget.demo', 76  77   requires: [ 78     'TestViewModel' 79   ], 80   // Always use this form when defining a view class. This 81   // allows the creator of the component to pass data without 82   // erasing the ViewModel type that we want. 83   initComponent: function(){ 84     //this.ownerCt 85     //var parent = this.findParentByType('panel'); 86     //console.log(parent.title); 87  88     var f = this.getViewModel().get('firstName'); 89     console.log(f); 90     this.callParent(arguments); 91   }, 92   //这个地方为空,就可以和主容器使用相同的一个model,如果你viewModel:{type: test},就相当于又 93   //实例化了一个model 94   viewModel: { 95  96   }, 97  98   bind: { 99     title: '{firstName}'100   }101   102 });

/*

当一个容器中有几个组件公用一个控制器和一个模型
在组件中 使用 controller: 'main'时 可以容器组件共用一个,此时实例化容器时,也就是一个控制器
但是在 组件中 使用 viewModel:type: 'main' 时,就需要考虑了,因为每个组件都会实例化一个
模型,如果想容器和组件共用一个模型,一个实例化。就在容器中设置viewModel:{type: 'main'},组件中设置 viewModel: {}, 为空就可以了
*/

转载于:https://www.cnblogs.com/shaoshao/p/4112985.html

你可能感兴趣的文章
Ubuntu下没有公钥解决办法
查看>>
spread编辑后,点击按钮清空值或者覆盖值
查看>>
Docker registryV2源码解读【一】整体架构与启动过程
查看>>
processing rotate
查看>>
oracle锁表解锁
查看>>
wingIDE支持中文
查看>>
三种开源Java应用服务器的比较
查看>>
Comet:基于 HTTP 长连接的“服务器推”技术
查看>>
Dell服务器固件升级
查看>>
安装 StackExchange.Redis
查看>>
find命令
查看>>
cocos2d-x字体描边Label
查看>>
运维之我的saltstack短篇教程
查看>>
puppet资源file详细介绍(附案例)
查看>>
Office365 Exchange Hybrid No.16 混合后统一登录地址
查看>>
全国OA系统(全)
查看>>
vim命令行模式
查看>>
SQL SERVER 2008无法删除作业的解决方法
查看>>
教主CCNP交换安全上课现场照片
查看>>
shell磁盘监控自动化处理
查看>>