zoukankan      html  css  js  c++  java
  • extjs5 一个容器中有几个组件公用一个控制器和一个模型

      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      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: {}, 为空就可以了
    */

  • 相关阅读:
    C语言-错误处理
    C语言-排序和查找
    PCB设计要点
    C语言-调试
    c++ 概述
    C语言-指针
    C语言-数组与指针 字符与字符串
    C语言-(void*)类型指针
    C语言-字符操作函数
    C语言-链表
  • 原文地址:https://www.cnblogs.com/shaoshao/p/4112985.html
Copyright © 2011-2022 走看看