Hierarchy
Ext.BaseExt.data.AbstractStoreExt.data.StoreExt.data.NodeStoreInherited mixins
Requires
Subclasses
Files
NOTE This is a private utility class for internal use by the framework. Don't rely on its existence.
Node Store
如果data属性未定义, 并且autoLoad值为'true'或对象, 则此store的load方法将在创建后自动执行. 如果autoLoad值是一个对象, 这个对象将 作为参数传递给load方法. 默认为'false'.
允许Store去预取多页的数据并缓存在 page cache 中, 然后就可以通过页面缓存满足loading的需求.
使用 buffered Stores时, 加载第一页是就会启动缓冲的过程. 渲染的行数是自动确定的, 而且需要保持在cache中用于滚动的页面范围会被请求和缓存下来. Example:
// 加载第 1 页 myStore.loadPage(1);
一个 PagingScroller 会被实例化, 用来监听grid的滚动, 并在需要的时候从page cache中刷新 view的行. 也利用预取数据在视图滚动到两端附近 时将新的数据放入page cache中.
触发view从预取数据刷新的边界(margins)包括: Ext.grid.PagingScroller.numFromEdge, Ext.grid.PagingScroller.leadingBufferZone 以及 Ext.grid.PagingScroller.trailingBufferZone.
触发加载更多数据到 page cache 的边界(margins)包括: leadingBufferZone 和 trailingBufferZone.
默认情况下, 只有 5 个 page 的数据缓存在 page cache 中, 通过数据集的视图向下移动,页面会 "滚动" 出缓冲. 可以通过设置 purgePageSize 值来增加缓存的页数, 将这个值设为 0 则意味着没有页面是 曾经 滚动出page cache的范围, 而且最终可能整个数据集都会出现在 page cache中. 这有时是可取的,只要数据(datasets)没有达到天文数字的比例.
选择状态(Selection state)可以跨页保存下来, 通过配置 SelectionModel,当这些记录周期超出Store的主要集合(primary collection)时, 不要将其从集合中丢弃(discard). This is done 此时,可以像下面这样配置 SelectionModel :
selModel: {
pruneRemoved: false
}
Defaults to: false
设置为 true 则当通过loadPage、nextPage或 previousPage 来加载另一页时会清空 store. 设置为 false 则保持已存在的记录, 允许一次加载大量的数据集到一页中,但是渲染在一起.
Defaults to: true
如果设置为 true,则在store进行load数据时,清空 removed 记录列表里的所有数据.
Defaults to: true
本地加载的数组,或者Model 实例数组,或者数据对象数组. 详细信息请参考上面的 "内联数据".
此参数可以用来代替model参数. fields值应该是一个Ext.data.Field属性对象的集合. store对象将 自动使用此参数的值来创建一个Ext.data.Model数据模型. 通常应该避免使用此参数, 它只是为了向下兼容而存在. 对于任何稍复杂的情况, 比如制定一个特定的ID或关联关系, 都应该定义一个Ext.data.Model模型对象并通过 model参数指定给当前store.
每当表格请求重新渲染的行时,在返回请求行之后, Store会确保缓存中的数据涵盖两个区域所需的数据,如果数据不在缓存, 则会向服务器请求数据, 保持在可视区域下已渲染的记录数. 一个更大的数字意味着需要从服务器补充(replenishments)的次数更少.
Defaults to: 200
一个配置对象,包含一个或多个事件处理函数,在对象初始化时添加到对象。 它应该是addListener指定的一个有效的监听器配置对象, 一次添加多个事件处理函数。
Ext JS 组建的DOM事件
虽然一些Ext JS组件类输出选定的DOM事件(例如"click"、"mouseover"等),
但是这只能通过添加额外的值(如果能)。例如,DataView的itemclick
传递被单击的节点。为了通过Component的子元素直接访问DOM事件,
我们需要指定element
选项来标识要
添加DOM监听器的Component属性:
new Ext.panel.Panel({
width: 400,
height: 200,
dockedItems: [{
xtype: 'toolbar'
}],
listeners: {
click: {
element: 'el', //bind to the underlying el property on the panel
fn: function(){ console.log('click el'); }
},
dblclick: {
element: 'body', //bind to the underlying body property on the panel
fn: function(){ console.log('dblclick body'); }
}
}
});
当前store对象的Model数据模型的名称. 此字符串将作为一个参数来调用Ext.ModelManager.getModel.
你想绑定此仓库的记录。注意 如果本记录没有被Ext.data.NodeInterface装饰, 本记录将会被Ext.data.NodeInterface装饰
Defaults to: null
组成一页'page'的记录数量. 当grig通过一个PagingScroller来分页时, 此参数用于内置的 nextPage 以及 previousPage 函数. 默认值是 25.
如果Store配置为buffered 的, 在 Store 的数据从cache更新之前, 页面(pages)就已经被加载到page cache 中了. pageSize就是一次请求加载到cache中的行数. 这不会影响到buffered grid的渲染(rendering), 但是page size大意味着加载次数少.
在一个 buffered grid 中, 滚动(scrolling)是被监听着的, 页面缓存(page cache)会准备好滚动前方的数据, 当继续滚动而需要时可以快速地得到这些数据. 根据几个参数可能会提前请求一些pages.
实际使用中,请根据您的应用程序的相关需求适当调整 pageSize, trailingBufferZone 以及 leadingBufferZone 配置项.
提供的 SDK 示例 examples/grid/infinite-scroll-grid-tuner.html
可以用来测试不同的设置,包括 Ajax 延迟.
此Store使用的Proxy. 可以配置为字符串(string), 配置对象(config object)或者是Proxy实例- 详细信息请查看 setProxy.
Overrides: Ext.data.AbstractStore.proxy
只在使用 buffered Store 时才有效.
在清除最近最少使用记录之前, 保持在预取缓存中 额外需要缓存 的页面数量.
例如, 根据视图区域的高度 以及 配置的 trailingBufferZone 和 leadingBufferZone
计算得出要在cache中缓存 3 个 pages, 那么设置 purgePageCount
为 5 则可以确保任意时刻最多可以有 8 个 page 在 page cache中.
值为 0 则表示从不清除预提取的数据.
Defaults to: 5
如果你想本NodeStore在它的扁平化的数据集里存储 当前节点的所有子节点,设置为true。这对 将树结构渲染到DataView十分有用,并且被TreeView在内部使用。 本仓库绑定的节点下任意深度的节点被移动、移除、 附加新的记录和插入新的记录 都将更新本仓库内部的扁平化的数据结构。
Defaults to: false
设置为 true 则将所有的过滤操作推迟到服务器. 如果设置为 false, 则在客户端本地过滤.
Defaults to: false
如果分组(grouping)应该在服务端执行,则设置为true,如果设置为false 则只在本地执行. If the 如果分组(grouping)是本地的,那么可以立即被应用到数据中. 如果是远程的, 则只会简单地扮演 helper, 自动发送 grouping 信息给 server.
Defaults to: false
设置为 true 则将所有的排序操作推迟到服务器. 如果设置为 false, 则在客户端本地排序.
Defaults to: false
设置为false,在本store的数据集合中不包含根节点
Defaults to: false
当前store对象的唯一标识ID. 当此值存在时, 当前Store将被注册到Ext.data.StoreManager中, 从而可以在别处轻松创建.
注意当sotre对象是由Controller进行实例化时, storeId值将被store的名称覆盖.
每当表格请求重新渲染的行时,在返回请求行之后, Store会确保缓存中的数据涵盖两个区域所需的数据,如果数据不在缓存, 则会向服务器请求数据, 保持在可视区域上的已渲染记录数. 一个更大的数字意味着需要从服务器补充(replenishments)的次数更少.
Defaults to: 25
本NodeStore的Ext.tree.View使用的TreeStore。
本NodeStore的Ext.tree.View使用的TreeStore。
扩展事件
Defaults to: []
设置更新操作为批量同步更新. 'operation'(默认)表示Store的内部数据会在批处理的每次操作完成后更新, 'complete'表示Store的数据 会等到整个批处理全部完成后再更新. 在使用本地数据代理时选择'complete'比较合适, 而'operation'更适用于相对延时较高的远程代理.
Defaults to: "operation"
Store 最后一次load的页 (参见 loadPage)
Defaults to: 1
持有 store 的本地缓存记录的 对象集合(MixedCollection).
持有 store 的本地缓存记录的 对象集合(MixedCollection).
默认的Proxy代理对象字符串类型. 默认值为创建一个Memory内存代理.
Defaults to: "memory"
默认的排序方向
Defaults to: "ASC"
'true'表示此Store所有附属的过滤器都会在加载数据之后, datachanged事件触发之前执行. 默认为'true', 当 remoteFilter为'true'时此参数被忽略.
Defaults to: true
本对象包含任何有监听器的事件的键。监听器可以在实例上直接设置, 或者在其类或者父类(通过observe) 或者在MVC EventBus上设置。本对象的值为真 (一个非零的数字)和假(0或者undefined)。它们并不代表确切的监听器数量。 如果事件必须被触发,它的值是真的, 如果没有必要,就是假的。
本属性的设计目的是避免没有监听器时调用fireEvent的开销。 如果fireEvent要调用成百上千次,这尤其有用。 用法:
if (this.hasListeners.foo) {
this.fireEvent('foo', this, arg1);
}
'true'表示model模型对象将由Store内部创建. 这种情况发生在使用fields数组而不是model对象或名称来创建Store时.
Defaults to: false
'true'表示Store已被销毁. 如果此值为true, 所有对当前Store的引用都应被删除, 因为此时所有的方法都已经不再保证能够正确执行.
Defaults to: false
在本类中设置为true
将一个对象标识为实例化的Observable或其子类。
Defaults to: true
设置为true
将某个对象标识为实例化的Sortable或其子类。
Defaults to: true
一组默认值, 将被应用到所有通过insert添加或create创建的数据实例中. 此参数由关联模型在内部使用, 用来为外键和其他字段赋值. 可在Association类源码中查看相关示例. 应用程序开发人员通常不需要使用此参数.
被删除的数据实例的临时缓存, 直到Proxy成功执行同步后清空.
Defaults to: []
本身
获取当前类的引用,此对象被实例化。不同于 statics,
this.self
是依赖范围,它意味着要使用动态继承。
参见 statics 详细对比
Ext.define('My.Cat', {
statics: {
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
alert(this.self.speciesName); // 依赖 'this'
},
clone: function() {
return new this.self();
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
}
});
var cat = new My.Cat(); // alerts 'Cat' 猫
var snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard' 雪豹
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
快照,store中一个原始的 (未过滤的) 记录集合. 用来在filter发生改变或被删除时进行数据恢复.
'true'表示此Store所有排序都会在加载数据之后, datachanged事件触发之前执行. 默认为'true', 当 remoteSort为'true'时此参数被忽略.
Defaults to: true
添加 Model 实例到 Store. 本方法接收的参数可以是:
新的 Model 实例将被添加到已存在的数据集合末尾.
用法示例:
myStore.add({some: 'data'}, {some: 'other data'});
注意: 如果 Store 已经排好序,则新的 Model 对象将被插入到适当的位置,以保持排序顺序.
可以是由 Model 实例/配置对象 组成的数组, 也可以是任意数量的 Model 实例,或者配置对象 组成的多个参数.
已被添加到store中的model实例
成员
向本对象添加一个事件处理函数,例如:
myGridPanel.on("mouseover", this.onMouseOver, this);
这个方法也允许传递单个参数,参数为一个 包含指定多个事件的属性的配置对象。例如:
myGridPanel.on({
cellClick: this.onCellClick,
mouseover: this.onMouseOver,
mouseout: this.onMouseOut,
scope: this // Important. Ensure "this" is correct during handler execution
});
你也能为每个事件处理函数单独指定选项:
myGridPanel.on({
cellClick: {fn: this.onCellClick, scope: this, single: true},
mouseover: {fn: panel.onMouseOver, scope: panel}
});
也能使用在特定作用域的方法名。注意
必须指定scope
:
myGridPanel.on({
cellClick: {fn: 'onCellClick', scope: this, single: true},
mouseover: {fn: 'onMouseOver', scope: panel}
});
被监听的事件名。 也可以是属性名字是事件名字的对象。
事件调用的方法, 或者如果指定了scope
,在指定scope
的方法名*。
会被调用,
参数为fireEvent的参数加上下述options
参数。
事件处理函数执行的作用域(this
应用的上下文)
如果省略, 默认为触发事件的对象。
包含事件处理函数配置的对象。
注意: 不像ExtJS 3.x, options对象也会作为最后一个参数 传递给每一个事件处理函数。
这个对象可能包含以下任何一个属性:
事件处理函数执行的作用域(this
应用的上下文)
如果省略, 默认为触发事件的对象。
事件触发后,调用事件处理函数延时毫秒数。
设置为true添加一个事件处理函数,只处理下一次触发的事件, 然后移除这个函数。
使事件处理函数在Ext.util.DelayedTask中调度运行, 延时指定的毫秒数。如果事件在这段事件再次触发, 原先的事件处理函数不再调用, 新的事件处理函数接替。
只有当事件在目标Observable上触发时调用事件处理函数, 如果事件是从Observable的子类起泡的,不会调用事件处理函数
这个选项只对绑定在Components上的监听器有效。 Component的一个属性名,这个属性引用一个待添加监听器的元素
这个选项在Component构造过程中向Components的元素添加DOM事件监听器有用。 这些元素只有在Component渲染之后才会存在。 例如, 向Panel的body中添加click监听器:
new Ext.panel.Panel({
title: 'The title',
listeners: {
click: this.handlePanelClick,
element: 'body'
}
});
组合选项
使用options参数, 可以组合不同类型的监听器:
一个延时的一次性监听器:
myPanel.on('hide', this.handleClick, this, {
single: true,
delay: 100
});
向任何Observable对象(或者Ext.Element)添加监听器, 当组件被销毁时,监听器自动被移除
添加监听器的目标项。
事件名或者包含的事件名属性的对象。
(可选的) 如果ename
参数是事件名, 这就是一个事件处理函数。
(可选的) 如果ename
参数是事件名, 这就是(this
引用的上下文)
事件处理函数执行的作用域。
(可选的)如果ename
参数是事件名,
这就是addListener的选项。
当一个数据实例执行了Ext.data.Model.join方法后, 应调用Store的此函数.
被编辑的数据实例
编辑时修改的字段的名称数组.
以store中的所有记录为基础来运行aggregate(汇总)函数 .
如果store有过滤器, 则只有过滤后的数据会被汇总(aggregated).
要执行的函数. 此函数被调用时将会收到单个参数,即所在组的数据组成的数组.
要执行函数的作用域. 默认就是 store对象.
设置为true在对store中的所有分组执行操作. 此时返回的值将会是一个对象,由 group name 作为key,而分组的相关数据将会成为对应的值. 参数 grouped 只有当store 拥有 groupField时才需要使用.
要附加到函数调用(function call)的所有参数
组名以及适当的值组成的字面量对象.
在 prefetch 时,缓存记录 and 根据服务端的 index 进行分页.
要缓存的记录
相关的操作
调用原来的方法,这是以前的override重写
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
this.callOverridden();
alert("Meeeeoooowwww");
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
// alerts "I'm a cat!"
// alerts "Meeeeoooowwww"
This method has been deprecated since 4.1
版本 使用 callParent 代替.
参数的参数,数组或'参数'对象
来自当前方法,例如: this.callOverridden(arguments)
返回调用重写方法的结果。
所谓的"parent"方法是指当前的方法。 这是以前的方法派生或重写(参见 Ext.define)。
Ext.define('My.Base', {
constructor: function (x) {
this.x = x;
},
statics: {
method: function (x) {
return x;
}
}
});
Ext.define('My.Derived', {
extend: 'My.Base',
constructor: function () {
this.callParent([21]);
}
});
var obj = new My.Derived();
alert(obj.x); // alerts 21
这可以用来重写如下:
Ext.define('My.DerivedOverride', {
override: 'My.Derived',
constructor: function (x) {
this.callParent([x*2]); // 调用原来的My.Derived构造
}
});
var obj = new My.Derived();
alert(obj.x); // 现在提示 42
This also works with static methods.
Ext.define('My.Derived2', {
extend: 'My.Base',
statics: {
method: function (x) {
return this.callParent([x*2]); // 调用 My.Base.method
}
}
});
alert(My.Base.method(10); // alerts 10
alert(My.Derived2.method(10); // alerts 20
然后,它也可以重写静态方法。
Ext.define('My.Derived2Override', {
override: 'My.Derived2',
statics: {
method: function (x) {
return this.callParent([x*2]); // 调用 My.Derived2.method
}
}
});
alert(My.Derived2.method(10); // 现在提示 40
这个参数, 通过当前方法得到数组或者 arguments
对象,
例如: this.callParent(arguments)
返回调用父类的方法的结果。
取消所有等待中的预取请求.
当 page map 被清空是会被调用.
当前的所有请求都会打上 上一代的标签. (generation代 会随着 clear操作增长), 并拒绝迟来的上代数据.
清空过滤器,将 Record cache 恢复到没有过滤的情况.
如果设置为 true
,则会静默清除.
对于使用本地过滤的 Store, 意味着清空 filter 集合,却不触发任何 datachanged 事件.
对于使用服务端过滤的 Store, 意味着清空 filter, 却不重新从服务端加载数据.
清空此store内部所有的groupers(分组对象)
移除本对象的包括受管理的监听器在内的所有监听器
移除本对象的所有受管理的监听器
提交所有 未完成更改(outstanding changes) 的记录. 要自己处理变化记录的更新,监听 Store 的 update 事件, 并且当第三个参数是 Ext.data.Record.COMMIT 的时候执行更新.
返回一个 filter 函数,用来过滤给定的属性的值. 大部分依赖 Ext.util.MixedCollection 的 createValueMatcher 方法的功能.
要创建过滤函数的属性
要根据 string/regex 来对比属性值
如果不需要完全匹配,则设置为 true.
Defaults to: false
如果设置为 true,则创建区分大小写的正则, case-sensitive regex.
Defaults to: false
如果需要完全匹配,则设置为 true (会在正则表达式中 添加^ and $ 字符). 如果 anyMatch 设置为 true 则忽略此参数.
Defaults to: false
规范化过滤器对象数组, 将他们统一成Ext.util.Filter类的实例.
过滤器数组
Ext.util.Filter对象数组
私有方法, 转化(Normalizes,正常化) 一个grouper对象组成的数组, 确保他们都是 Ext.util.Grouper 的实例.
组grouper对象 数组
数组,由 Ext.util.Grouper 对象组成.
Normalizes an array of sorter objects, ensuring that they are all Ext.util.Sorter instances
The sorters array
Array of Ext.util.Sorter objects
通过调用this.getBubbleTarget()
(如果存在)允许本Observable对象触发的事件沿着继承体系起泡
在Observable基类中没有实现类。
这通常被Ext.Components用来将事件起泡到它的容器。 见Ext.Component.getBubbleTarget。Ext.Component中的默认实现 返回Component的直接容器。但是如果需要一个明显的target, 它可以被重写 以更快地访问需要的target。
使用范例:
Ext.override(Ext.form.field.Base, {
// Add functionality to Field's initComponent to enable the change event to bubble
initComponent : Ext.Function.createSequence(Ext.form.field.Base.prototype.initComponent, function() {
this.enableBubble('change');
}),
// We know that we want Field's events to bubble directly to the FormPanel.
getBubbleTarget : function() {
if (!this.formPanel) {
this.formPanel = this.findParentByType('form');
}
return this.formPanel;
}
});
var myForm = new Ext.formPanel({
title: 'User Details',
items: [{
...
}],
listeners: {
change: function() {
// Title goes red if form has been modified.
myForm.header.setStyle('color', 'red');
}
}
});
根据给定的过滤器集合,对已加载的记录进行过滤.
默认情况下, 传入的单/多个 filter(s) 都被 添加 到 filters 集合中,并用来对 Store 过滤.
在应用新的 filters集合之前, 如果要清除已存在的 filters,请使用:
// 清除过滤器而不更新界面(UI)
store.clearFilter(true);
详情请参考 (@link clearFilter}.
另外, 如果 filters 设置了 id
, 那么store 会用新的 filters 替换 具有相同 id
的已存在的 filters.
根据单个属性域(field)过滤:
store.filter("email", /\.com$/);
根据多个属性域(field)过滤:
store.filter([
{property: "email", value: /\.com$/},
{filterFn: function(item) { return item.get("age") > 10; }}
]);
可以使用 Ext.util.Filter 实例, 而不是 配置对象. (注意 在此种情况下我们需要指定 root 配置项):
store.filter([
Ext.create('Ext.util.Filter', {property: "email", value: /\.com$/, root: 'data'}),
Ext.create('Ext.util.Filter', {filterFn: function(item) { return item.get("age") > 10; }, root: 'data'})
]);
如果store有过滤器, 那么访问store数据的大部分方法所处理的都是过滤后的记录. 两个值得注意的例外是 queryBy 和 getById.
要对数据使用的过滤器集合. 过滤器会被存储着 store 内部, 但是过滤本身是在 Store 的 MixedCollection 中发生的. 关于 filter 的语法请参考 MixedCollection 的 filter 方法. 否则, 请传入一个表示属性名的字符串
用来过滤的值 (只有第一个参数是代表属性域名字的string的情况)
由函数来执行过滤. 指定的函数将由Store 中的每一条记录调用.
如果函数返回 true
则将记录包含进来,否则将被过滤掉.
如果store有过滤器, 那么访问store数据的大部分方法所处理的都是过滤后的记录. 两个值得注意的例外是 queryBy 和 getById.
要被回调的函数. 调用时将会传入以下参数:
用来进行过滤测试的记录. 通过使用 Ext.data.Model.get 来访问属性域的值.
传入记录的ID.
函数执行的作用域(即this 引用). 默认是当前store.
根据指定的属性域,以及指定的值,找出第一条匹配的记录的索引 index.
如果store有过滤器, finds 在过滤后的数据中.
要查找的属性域 名字.
可以是需要匹配的string,或者是正则表达式. 如果是字符串, 则需要以此string开始 才会匹配.
起始搜索位置的索引
Defaults to: 0
设置为 true,则只要匹配一部分就行, 不再强制必须以 value 参数开头.
Defaults to: false
如果设置为 true,则进行区分大小写的对比
Defaults to: false
设置为 true 则强制完全匹配 (会在正则表达式中 添加^ and $ 字符)
Defaults to: false
找到的记录索引 或者 -1
在 Store中根据一个函数来找出第一条匹配的记录.
如果函数返回 true
则被认为有匹配记录.
如果store有过滤器, 则只在过滤后的数据中查找.
要被回调的函数. 调用时将会传入以下参数:
用来进行过滤测试的记录. 通过使用 Ext.data.Model.get 来访问属性域的值.
传入记录的ID.
函数执行的作用域(即this 引用). 默认是当前store.
开始查找的索引,偏移
Defaults to: 0
匹配的记录index 或者-1
根据指定的属性域,以及指定的值,找出第一条匹配的记录。
如果store有过滤器, 则在过滤后的数据中进行查找.
要查找的属性域 名字.
可以是需要匹配的string,或者是正则表达式. 如果是字符串, 则需要以此string开始 才会匹配.
起始搜索位置的索引
Defaults to: 0
设置为 true,则只要匹配一部分就行, 不再强制必须以 value 参数开头.
Defaults to: false
如果设置为 true,则进行区分大小写的对比
Defaults to: false
设置为 true 则强制完全匹配 (会在正则表达式中 添加^ and $ 字符)
Defaults to: false
找到的记录 或者 null
使用传递过来的参数(去掉事件名,加上传递给addListener的options
对象
)触发指定的事件。
通过调用enableBubble,一个事件 能被设置为沿着Observable的继承体系(见Ext.Component.getBubbleTarget)向上起泡。
如果任何一个事件处理函数返回false,就返回false,否则返回true。
触发 groupchange 事件. 抽象出来(Abstracted out) 以便我们可以用来作为回调
获取store中第一条记录的快捷方法.
如果store有过滤器, 将会返回过滤后的第一条记录.
设置为true在对store中的所有分组执行操作. 此时返回的值将会是一个对象,由 group name 作为key,而第一条记录将会成为对应的值. 参数 grouped 只有当store 拥有 groupField时才需要使用.
store中第一条记录, 或者 undefined
获取指定index处的记录.
index 受过滤器的影响.
要查找的记录的index.
传入 index 处的记录Record. 如果没有找到则返回 undefined.
返回一个对象, 用于执行this.sync时传给proxy.batch参数对象的listeners参数中. 我们将此操作拆分到一个单独的方法中以便于对listeners监听器进行定制修改.
监听(listeners)对象.
Gets the bubbling parent for an Observable
The bubble parent. null is returned if no bubble target exists
通过指定的 id 获取记录.
此方法不受过滤器的影响; 将会从store的所有记录中进行查找,无论是否被过滤.
要查找的记录的 id.
传入id对应的记录. 如果没找到则 null.
获取store中记录的数量.
如果使用分页, 则返回的可能不是 dataset 的总的大小. 如果 Reader 使用的数据对象包含了 dataset 大小, 则可以使用 getTotalCount 函数来取得所有个数. 重要提示: 请参考 load 查看注意事项.
受过滤器的影响, 如果指定了filter,则返回匹配过滤规则的记录的数量.
store中记录的数量.
返回由配置项grouper 所分分组组的记录. (在一个虚构的书本集合中,先按类型,再按作者分组)返回的数据示例如下:
[
{
name: 'Fantasy',
depth: 0,
records: [
//book1, book2, book3, book4
],
children: [
{
name: 'Rowling',
depth: 1,
records: [
//book1, book2
]
},
{
name: 'Tolkein',
depth: 1,
records: [
//book3, book4
]
}
]
}
]
设置为 true 则在查找 group 之前调用 sort. 在分组时总是需要排序的,所以只有能确认已经排好序了才应该传入false.
Defaults to: true
分组后的数据
为传入的model实例取得分组时要使用的string. 默认实现是返回模型的分组域 groupField, 但可以根据需要进行重写. 例如,要根据 model 的 'name' 属性域的首字母来进行分组,可以使用如下代码:
Ext.create('Ext.data.Store', {
groupDir: 'ASC',
getGroupString: function(instance) {
return instance.get('name')[0];
}
});
模型实例
在分组时进行比较的string
返回一个数组,该数组包含对此store使用分组得到的 组对象. 参见 groupField, groupDir 以及 getGroupString. 下面是包含color域的Model组成的一个store示例:
var myStore = Ext.create('Ext.data.Store', {
groupField: 'color',
groupDir : 'DESC'
});
myStore.getGroups(); // 返回的结果如下:
[
{
name: 'yellow',
children: [
// 所有 color域的值是 'yellow' 的记录
]
},
{
name: 'red',
children: [
// 所有 color域的值是 'red' 的记录
]
}
]
Group 内容受过滤器的影响 .
传入可选的 groupName 参数来获取指定的那一个分组 group as defined by getGroupString.
本方法用于递归地收集记录到配置的 Groupers中. 要让本方法正常工作,数据 必须 是排序好的. (参见 getGroupData 以及 getGroupsForGrouper) 大部分工作是由 getGroupsForGrouper 完成的- 该函数只是该处理递归.
要分组的集合或子集合
要获取的grouper 索引
分组后的记录
获取自上次提交以来, 所有新添加或被修改的records数据记录集. 注意数据记录的顺序是不确定的, 不是按数据修改的 顺序排列的. 还要注意此集合不包括被删除的数据记录(如需要请使用getRemovedRecords).
添加或修改的数据实例集合
返回全部虚拟的(例:没有id), 或有id但还没有保存到Store对象的(当从另一个Store对象添加一个非虚拟数据到当前对象时)数据实例.
数据实例集合
返回指定索引范围内的记录.
本方法受过滤器的影响.
开始索引 index
Defaults to: 0
结尾索引 index. 默认是Store中最后一条记录的index.
记录(Record)所组成的数组
查找记录在store中的 index.
本方法受过滤器的影响,没通过过滤的记录不会被发现.
要查找的 Ext.data.Model 对象.
传入记录对应的索引 index. 如果没找到则返回 -1.
查找记录在整个数据集中的 index. 从 0 到 totalCount.
和 indexOf 方法一样, 本方法也受 过滤器的影响.
要查找的 Ext.data.Model 对象.
传入记录对应的索引 index. 如果没找到则返回 -1.
这个类的初始化配置。典型例子:
Ext.define('My.awesome.Class', {
// 这是默认配置
config: {
name: 'Awesome',
isAwesome: true
},
constructor: function(config) {
this.initConfig(config);
}
});
var awesome = new My.awesome.Class({
name: 'Super Awesome'
});
alert(awesome.getName()); // 'Super Awesome' 超级棒
配置
mixins 混入原型 键-值对
初始化本混入元素。使用本混入元素的组件类 应该在它们初始化时调用这个方法。
从给定的索引处开始,插入 Model 实例;并触发 add 事件. 也可以参考 add.
从何处开始插入给定的记录.
要添加到 store的 Ext.data.Model 组成的数组.
获取store中最后一条记录的快捷方法.
如果store有过滤器, 将会返回过滤后的最后一条记录.
设置为true在对store中的所有分组执行操作. 此时返回的值将会是一个对象,由 group name 作为key,而最后一条记录将会成为对应的值. 参数 grouped 只有当store 拥有 groupField时才需要使用.
store中最后一条记录, 或者 undefined
通过配置的 proxy 加载数据到Store 中. 使用 Proxy 来执行异步调用,不关心具体的Proxy是什么类型, 自动添加获得的实例到 Store 中,如有需要,会调用传入的回调函数. 用法示例如下:
store.load({
scope: this,
callback: function(records, operation, success) {
// 对象 operation 包含
// 所有 load 操作的详细信息
console.log(records);
}
});
如果不需要指定回调函数的作用域(scope),则可以直接像下面这样传递:
store.load(function(records, operation, success) {
console.log('loaded records');
});
配置对象, 在加载之前会传入 Ext.data.Operation 对象中.
可以指定一个配置项: addRecords: true
来将新的记录附加到已存在的记录中,
因为默认情况下会先删除 Store 中所有已存在的数据.
Overrides: Ext.data.AbstractStore.load
直接加载一个数组的数据到 Store 中.
如果数据的格式已经处理好,那么可以使用此方法 (例如. 不必需要 reader 处理的数据). 如果你的数据还需要处理,那么请使用 MemoryProxy .
要加载的数据. 所有 non-model 实例都会首先被转换为 model 实例.
如果设置为 true 则将这些记录添加到已存在的记录中, 如果为 false 则会先删除原来的记录.
Defaults to: false
载入由 model 实例组成的数组到 store 中, 触发 datachanged 事件. 此方法通常只应该在从 Proxy 中加载数据时由内部调用, 如果要手动的增加记录,请使用 add 方法.
要加载的记录(数组)
如果设置{addRecords: true},则将这些记录添加到已存在的记录中, 如果为 false 则会先删除原来的记录.
addManagedListener的简写方法
向任何Observable对象(或者Ext.Element)添加监听器, 当组件被销毁时,监听器自动被移除
添加监听器的目标项。
事件名或者包含的事件名属性的对象。
(可选的) 如果ename
参数是事件名, 这就是一个事件处理函数。
(可选的) 如果ename
参数是事件名, 这就是(this
引用的上下文)
事件处理函数执行的作用域。
(可选的)如果ename
参数是事件名,
这就是addListener的选项。
移除通过mon方法添加的监听器。
待移除监听器的项
事件名或者包含的事件名属性的对象。
(可选的) 如果ename
参数是事件名, 这就是一个事件处理函数。
(可选的) 如果ename
参数是事件名, 这就是(this
引用的上下文)
事件处理函数执行的作用域。
addListener的简写方法
向本对象添加一个事件处理函数,例如:
myGridPanel.on("mouseover", this.onMouseOver, this);
这个方法也允许传递单个参数,参数为一个 包含指定多个事件的属性的配置对象。例如:
myGridPanel.on({
cellClick: this.onCellClick,
mouseover: this.onMouseOver,
mouseout: this.onMouseOut,
scope: this // Important. Ensure "this" is correct during handler execution
});
你也能为每个事件处理函数单独指定选项:
myGridPanel.on({
cellClick: {fn: this.onCellClick, scope: this, single: true},
mouseover: {fn: panel.onMouseOver, scope: panel}
});
也能使用在特定作用域的方法名。注意
必须指定scope
:
myGridPanel.on({
cellClick: {fn: 'onCellClick', scope: this, single: true},
mouseover: {fn: 'onMouseOver', scope: panel}
});
被监听的事件名。 也可以是属性名字是事件名字的对象。
事件调用的方法, 或者如果指定了scope
,在指定scope
的方法名*。
会被调用,
参数为fireEvent的参数加上下述options
参数。
事件处理函数执行的作用域(this
应用的上下文)
如果省略, 默认为触发事件的对象。
包含事件处理函数配置的对象。
注意: 不像ExtJS 3.x, options对象也会作为最后一个参数 传递给每一个事件处理函数。
这个对象可能包含以下任何一个属性:
事件处理函数执行的作用域(this
应用的上下文)
如果省略, 默认为触发事件的对象。
事件触发后,调用事件处理函数延时毫秒数。
设置为true添加一个事件处理函数,只处理下一次触发的事件, 然后移除这个函数。
使事件处理函数在Ext.util.DelayedTask中调度运行, 延时指定的毫秒数。如果事件在这段事件再次触发, 原先的事件处理函数不再调用, 新的事件处理函数接替。
只有当事件在目标Observable上触发时调用事件处理函数, 如果事件是从Observable的子类起泡的,不会调用事件处理函数
这个选项只对绑定在Components上的监听器有效。 Component的一个属性名,这个属性引用一个待添加监听器的元素
这个选项在Component构造过程中向Components的元素添加DOM事件监听器有用。 这些元素只有在Component渲染之后才会存在。 例如, 向Panel的body中添加click监听器:
new Ext.panel.Panel({
title: 'The title',
listeners: {
click: this.handlePanelClick,
element: 'body'
}
});
组合选项
使用options参数, 可以组合不同类型的监听器:
一个延时的一次性监听器:
myPanel.on('hide', this.handleClick, this, {
single: true,
delay: 100
});
当写操作从服务器返回时, 清除所有记录缓存.
清除数据数组
刚完成返回的操作
'true'表示操作成功执行.
Callback for any write Operation over the Proxy. Updates the Store's MixedCollection to reflect the updates provided by the Proxy 回调函数, 在所有通过Proxy代理执行的写操作完成后执行. 将Proxy代理提供的更新反射到Store对象的数据集合中.
通过配置的 proxy 预取数据到 Store中.
配置对象, 在loading之前解析传入 Ext.data.Operation 对象. 参见 load
预取某页的数据.
要预取的页
配置对象, 在loading之前解析传入 Ext.data.Operation 对象. 参见 load
使用过滤函数来 查询 Store 中所有缓存的记录.
指定的函数将由Store 中的每一条记录调用.
如果函数返回 true
则将记录包含进结果集中.
此方法不受过滤器的影响; 将会从store的所有记录中进行查找,无论是否被过滤.
要被回调的函数. 调用时将会传入以下参数:
用来进行过滤测试的记录. 通过使用 Ext.data.Model.get 来访问属性域的值.
传入记录的ID.
函数执行的作用域(即this 引用) 默认是当前store.
返回由 匹配记录所组成的 Ext.util.MixedCollection
判断传入的范围在 page cache中是否可用.
This method has been deprecated since 4.1.0
使用 rangeCached 来代替此方法
Rejects 丢弃所有 modified records 上未完成的更改(outstanding changes). 并重新插入所有本地删除的数据. 所有虚幻(phantom)的记录都将被移除.
从指定的Observable接替选定的事件就好像事件是this
触发的。
例如,如果你想要扩展Grid, 你可能决定转发store的一些事件。 所以你能在你的initComponent中实现这个:
this.relayEvents(this.getStore(), ['load']);
grid实例将会有一个observable的'load'事件,
这个事件的参数是store的load事件的参数。任何grid的load事件触发的函数
可以使用this
访问grid。
从 Store 中删除给定的记录, 对每条删除的记录都会触发一次 'remove' 事件. 在此次的所有数据删除完成后,会触发一次 'datachanged' 事件.
要删除的 Model 实例(或实例数组).
从 store 中移除所有的条目.
安静模式,阻止 clear
事件触发.
Overrides: Ext.data.AbstractStore.removeAll
移除事件处理函数。
事件处理函数关联的事件类型
待移除的事件处理函数。 必须是对传递给addListener 的函数的引用。
(可选的) 原先为事件处理函数指定的作用域。 它必须是和原先调用addListener时指定的作用域参数是一样的,否者监听器将会被移除。
移除通过mon方法添加的监听器。
待移除监听器的项
事件名或者包含的事件名属性的对象。
(可选的) 如果ename
参数是事件名, 这就是一个事件处理函数。
(可选的) 如果ename
参数是事件名, 这就是(this
引用的上下文)
事件处理函数执行的作用域。
恢复Store与Proxy的自动数据同步. 仅当autoSync为true时有效.
继续事件的触发(见suspendEvents)。
如果事件被使用queueSuspended
参数挂起, 那么所有
在事件挂起期间触发的事件将会被发送到任意监听器。
通过字符串, 属性对象或Proxy实例为当前Store设置Proxy.
新Proxy对象, 可以是字符串, 属性对象, 或Ext.data.proxy.Proxy实例
附属的Proxy代理对象
使用一个或多个排序Store中的数据。使用范例:
//sort by a single field
myStore.sort('myField', 'DESC');
//sorting by multiple fields
myStore.sort([
{
property : 'age',
direction: 'ASC'
},
{
property : 'name',
direction: 'DESC'
}
]);
Store在内部将参数转换为Ext.util.Sorter实例数组, 把实际的排序过程委托给它内部的Ext.util.MixedCollection。
当传递单个字符串参数时, Store给每一个字段保存了一个ASC/DESC切换器,所以如下代码:
store.sort('myField');
store.sort('myField');
等价于如下代码, 因为Store实现自动的切换:
store.sort('myField', 'ASC');
store.sort('myField', 'DESC');
本Store的配置的Model的一个字段的字符串名字, 或者排序器配置数组。
数据排序方向。默认为"ASC"。
获取从该对象被实例化的类的引用。 请注意不同于 self,
this.statics()
是独立的作用域,无论this
是否运行,总是返回其中的调用类。
Ext.define('My.Cat', {
statics: {
totalCreated: 0,
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
var statics = this.statics();
alert(statics.speciesName); // 总是等于'Cat',无论'this'是什么,
// 相当于:My.Cat.speciesName
alert(this.self.speciesName); // 依赖 'this'
statics.totalCreated++;
},
clone: function() {
var cloned = new this.self; // 依赖 'this'
cloned.groupName = this.statics().speciesName; // 相当于: My.Cat.speciesName
return cloned;
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
},
constructor: function() {
this.callParent();
}
});
var cat = new My.Cat(); // alerts 'Cat', 然后提示 'Cat'
var snowLeopard = new My.SnowLeopard(); // alerts 'Cat', 然后提示 'Snow Leopard'
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
alert(clone.groupName); // alerts 'Cat'
alert(My.Cat.totalCreated); // alerts 3
暂停Store与Proxy的自动数据同步. 仅当autoSync为true时有效.
挂起所有事件的触发。(见resumeEvents)
传true,让挂起的事件排队而不是丢弃所有挂起的事件, 这些事件将会在调用resumeEvents之后触发。
同步Store与其proxy. 此处请求代理器分批处理Store中所有新增, 修改, 删除的记录, 并在每次操作执行完成后 更新Store内部的数据记录.
包含一个或多个同步方法所支持的属性参数的对象(这些参数将被传入底层代理的 batch方法):
一个Ext.data.Batch对象(或用来创建Batch实例的属性参数). 若未明确指定, 则会自动创建一个默认的Batch对象.
同步结束后的回调函数. 无论同步是否成功都将调用此回调函数, 调用参数如下:
操作前传入的batch参数, 包含处理完成后所有的带状态标记的操作对象.
最初传入sync方法的options参数.
同步操作成功完成后的回调函数. 此回调函数仅当所有操作都没有报告异常时才调用. 如果至少一个异常发生, 则改为调用options.failure方法 成功回调函数参数如下:
操作前传入的batch参数, 包含处理完成后所有的带状态标记的操作对象.
最初传入sync方法的options参数.
同步操作没有成功完成后的回调函数. 此回调函数在处理过程中有一个或多个操作返回 异常时被调用(即使有部分操作成功完成). 这种情况下你可以检查batch参数的exceptions 数组来查明发生异常的操作. 失败回调函数的参数如下:
操作前传入的batch参数, 包含处理完成后所有的带状态标记的操作对象.
最初传入sync方法的options参数.
所有回调函数的执行作用域(也就是callback, success, failure回调函数中的'this'所指对象). 默认为当前store的proxy对象.
this
配置扩展
removeListener的简写方法
移除事件处理函数。
事件处理函数关联的事件类型
待移除的事件处理函数。 必须是对传递给addListener 的函数的引用。
(可选的) 原先为事件处理函数指定的作用域。 它必须是和原先调用addListener时指定的作用域参数是一样的,否者监听器将会被移除。
方法/属性添加到这个类的原型。
Ext.define('My.awesome.Cat', {
constructor: function() {
...
}
});
My.awesome.Cat.implement({
meow: function() {
alert('Meowww...');
}
});
var kitty = new My.awesome.Cat;
kitty.meow();
成员
添加/重写这个类的静态属性。
Ext.define('My.cool.Class', {
...
});
My.cool.Class.addStatics({
someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue'
method1: function() { ... }, // My.cool.Class.method1 = function() { ... };
method2: function() { ... } // My.cool.Class.method2 = function() { ... };
});
成员
this
这个类的原型借用另一个类的成员
Ext.define('Bank', {
money: '$$$',
printMoney: function() {
alert('$$$$$$$');
}
});
Ext.define('Thief', {
...
});
Thief.borrow(Bank, ['money', 'printMoney']);
var steve = new Thief();
alert(steve.money); // alerts '$$$'
steve.printMoney(); // alerts '$$$$$$$'
this 借用成员
创建这个类的新实例。
Ext.define('My.cool.Class', {
...
});
My.cool.Class.create({
someConfig: true
});
所有参数传递至类的构造。
创建的实例。
创建现有的原型方法的别名。例如:
Ext.define('My.cool.Class', {
method1: function() { ... },
method2: function() { ... }
});
var test = new My.cool.Class();
My.cool.Class.createAlias({
method3: 'method1',
method4: 'method2'
});
test.method3(); // test.method1()
My.cool.Class.createAlias('method5', 'method3');
test.method5(); // test.method3() -> test.method1()
别名新方法的名称,或对象设置多个别名。 参见flexSetter
原来的方法名
以字符串格式,获取当前类的名称。
Ext.define('My.cool.Class', {
constructor: function() {
alert(this.self.getName()); // alerts 'My.cool.Class'
}
});
My.cool.Class.getName(); // 'My.cool.Class'
className 类名
重写这个类的成员。通过callParent重写的方法可以调用。
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
this.callParent(arguments);
alert("Meeeeoooowwww");
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!我要成为一只猫!"
// alerts "I'm a cat!我是一只猫!"
// alerts "Meeeeoooowwww"
在4.1版本, 直接利用这种方法已经过时了。 使用 Ext.define 代替:
Ext.define('My.CatOverride', {
override: 'My.Cat',
constructor: function() {
alert("I'm going to be a cat!");
this.callParent(arguments);
alert("Meeeeoooowwww");
}
});
以上完成了相同的结果,但可以由Ext.Loader重写, 其目标类和生成过程中,可以决定是否需要根据目标类所需的状态覆盖管理(My.Cat)。
This method has been deprecated since 4.1.0
使用 Ext.define 代替
添加到这个类的属性。 这应当被指定为一个对象包含一个或多个属性的文字。
this class 当前类
当有数据实例被添加时触发此事件.
当前Store对象
被添加的数据实例.
数据实例被插入的位置.
The options object passed to Ext.util.Observable.addListener.
在一个新数据对象请求发出前触发此事件. 如果beforeload的处理函数返回'false', 数据请求将被取消.
当前Store对象
Store执行加载时作为参数传给Proxy的Ext.data.Operation对象.
The options object passed to Ext.util.Observable.addListener.
在预取操作之前触发. 返回 false 则取消操作.
相关的操作
The options object passed to Ext.util.Observable.addListener.
在执行sync调用之前触发此事件. 当有监听者返回'false'时取消同步.
所有待同步的数据记录, 分解为create, update和destroy的哈希存储.
The options object passed to Ext.util.Observable.addListener.
在removeAll方法调用之后触发此事件.
当前Store对象
The options object passed to Ext.util.Observable.addListener.
当Store中的现有数据有任何形式的更改时触发此事件 - 包括了添加、删除数据, 或更改现有数据.
当前Store对象
The options object passed to Ext.util.Observable.addListener.
只要 grid 中的分组一改变就触发
store对象
分组后的grouper对象组成的数组
The options object passed to Ext.util.Observable.addListener.
每当store从远程数据源读取数据时触发此事件.
当前Store对象
数据记录数组
当操作成功时为'true'.
The options object passed to Ext.util.Observable.addListener.
当store的底层reader对象(通过proxy对象调用)提供了新的元数据时触发此事件. 元数据通常由新的字段定义构成, 且可以包含系统所需的任意参数数据, 并可以根据需要由事件监听者处理. 此事件目前仅为JsonReader对象触发.
当前Store对象
JSON元数据
The options object passed to Ext.util.Observable.addListener.
在预取操作完成之后触发
由records组成的数组.
如果操作执行成功则返回 true.
相关的操作
The options object passed to Ext.util.Observable.addListener.
当数据缓存被整体修改(例如 排序,过滤等), 并且存在一个将当前Store作为记录缓存的组件需要刷新视图时触发此事件.
当前Store对象
The options object passed to Ext.util.Observable.addListener.
当有数据实例被删除时触发此事件.
当前Store对象
被删除的数据实例.
被删除数据实例的位置.
The options object passed to Ext.util.Observable.addListener.
当有数据实例被更新时触发此事件.
当前Store对象
被更新后的数据实例.
执行的数据操作类型. 可能的值为:
Ext.data.Model.EDIT
Ext.data.Model.REJECT
Ext.data.Model.COMMIT
被修改的字段名称的数组.
The options object passed to Ext.util.Observable.addListener.
每当通过配置的Proxy代理完成写操作时触发此事件.
当前Store对象
用于写数据操作的Operation对象.
The options object passed to Ext.util.Observable.addListener.