• 控制器中获取store


    在Controller中要获取View中的选中值我用
    [javascript] view plaincopyprint?
    var cmp = Ext.ComponentQuery.query('weldlist')[0].getSelectionModel();
    可是当我需要获取View中的非选中值时,找了找似乎没有直接的方法,那么只能获取页面的Store全数据,突然发现这里不知道怎么获取了,看API加上度娘谷哥找到一些方法,mark一下助人助己。

    API中,Componont类写着getCmp()方法可以获取到Ext封装的组件。而Store也被Ext认为属于组件部分。那为什么用getCmp()却获取不到这个对象呢?

    因为Ext设计的控件其实最底层还是封装了<div>和css, 你说外观嘛,有外观的控件当然可以用div和css来显示,但是store可不是一个有外观的控件,它没有表现形式,只是一个普通的用来存储数据的对象而 已。如果是以div的形式保存在页面的话,那么数据在哪里?而且一个div也不可能保存store中的数据吧?这样会非常危险的。因为查看源码就会暴露 store中的数据,这对于数据权限控制是不利的。那store究竟在哪里呢?在内存中?

    深入一步。从getCmp()的源码中可以理解到。getCmp()其实就是获取这个页面上的某个div。按照这样想下去就有点吻合了。Store如果不 是保存在页面的话,那么就肯定是保存在内存中(而这也符合对数据的保护)。另一方,Store如果不是保存在页面的话,那么getCmp()当然也就不能 获取到它了。
    再深入一步,查看Store的API,发现一个很奇怪的问题,Store并没有id,取而代之的是storeId这样的一个属性。对于这个storeId的描述是:
    [javascript] view plaincopyprint?
    If passed, the id to use to register with the StoreMgr .
    Note: if a (deprecated) id is specified it will supersede the storeId assignment.

    大概意思是说:如果store成功初始化了,它的id将会被注册到一个叫StoreMgr(StoreManager的简写)的对象中。注意:如果id被指明的话,将会取代storeId。

    store会被注册到一个叫StoreMgr的对象中?那我们就看看这个对象是何方神圣!
    [javascript] view plaincopyprint?
    StoreMgr: Class Ext.StoreMgr
    The default global group of stores。//默认的全局Store组
    This class is a singleton and cannot be created directly。这个类是唯一的,不能直接创建。
    估计看到这里,大家都明白了,这个StoreMgr对象就是用来管理Store的。也就是说,这个对 象在Ext初始化之后,就存在了,采用单例模式,并负责store的存储和管理工作。这个对象估计就是存储在内存中的。我们声明的Store被保存到这里 来了,所以页面也就找不到了。
    综上所述,Store可以用以下方法获取到:
    [javascript] view plaincopyprint?
    Ext.getCmp('combo_color').store;//通过引用这个store的控件来获取这个
    Ext.StoreMgr.get('store_color'); //通过这个全局store管理器来获取 (store_color 是store_id)

  • 相关阅读:
    linux初学者-正则表达式
    linux初学者-文件管理篇
    linux初学者-常用基本命令篇
    初学者的linux
    java中接口的定义和接口的实现
    深入理解Java的接口和抽象类
    在pom.xml中的dependencies点击add怎么没有搜索到相关jar包
    json对象(对象+数组)
    poi导出模板(我的备份)
    js对象和数组的定义
  • 原文地址:https://www.cnblogs.com/shaoshao/p/4123351.html
Copyright © 2020-2023  润新知