Ext.data.Store 中 data 的克隆原理

前端时间开发的时候,需要将Ext.data.Store中的data先储存到一个变量中,然后将把这个store的data清空,最后再把变量中的data load到store中。

代码是这样的:

var tempData = this.store.data.clone();
/* Something else */
this.store.loadData([]);
/* Something else */
this.store.loadData(tempData);

这个时候你会发现,当执行到最后一行的时候,其实tempData的size已经是0,为什么?

大家肯定会想到深拷贝和浅拷贝的区别,答案就在于data (Ext.util.MixedCollection)的clone是浅拷贝

clone( ) : Ext.util.MixedCollection

Creates a shallow copy of this collection

Available since: 4.0.0

Returns

所以要达到我们的需求,必须自己来实现一个deepCopy的动作:

var tempData = this.store.data;
var r = new Ext.util.MixedCollection();
var keys = tempData.keys;
var items = tempData.items;
for(var i = 0, len = items.length; i < len; i++){
    r.add(keys[i], items[i].copy());
}
this.store.loadData([]);
for (var i = 0, len = r.items.length; i < len; i++) {
    this.store.loadData([r.items[i].data], true);
}

  

时间: 2024-10-12 18:13:38

Ext.data.Store 中 data 的克隆原理的相关文章

&#39;Ext.data.Store&#39; 中的 load

//产品store       window.product_store=Ext.create('Ext.data.Store',{  fields:[            'id',            'aid',            'webid',            'title',            'kindlist',            'attrid',            'ishidden',            'displayorder',     

ExtJs之Ext.data.Store

ExtJs之Ext.data.Store Posted on 2009-07-21 09:09 linFen 阅读(44912) 评论(5) 编辑 收藏 Store.getCount()返回的是store中的所有数据记录,然后使用for循环遍历整个store,从而得到每条记录. 除了使用getCount()的方法外,还可以使用each()函数,如下面的代码所示. store.each(function(record) { alert(record.get('name')); }); Each()

[ExtJS5学习笔记]第十四节 Extjs5中data数据源store和datapanel学习

本文地址:http://blog.csdn.net/sushengmiyan/article/details/39031383 sencha官方API:http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.grid.Panel-cfg-store 本文作者:sushengmiyan -----------------------------------------------------------------------------------

Ext.data.Store详解

Ext.data.Store是EXT中用来进行数据交换和数据交互的标准中间件,无论是Grid还是 ComboBox,都是通过它实现数据读取.类型转换.排序分页和搜索等操作的. Ext.data.Store中有一个Ext.data.Record数组,所有数据都存放在这些 Ext.data. Record实例中,为后面的读取和修改操作做准备. 10.4.1 基本应用 在使用之前,首先要创建一个Ext.data.Store的实例,如下面的代码所示. var data = [ ['boy', 0], [

Ext.data.Store(转)

Ext.data.Store是EXT中用来进行数据交换和数据交互的标准中间件,无论是Grid还是ComboBox,都是通过它实现数据读取.类型转换.排序分页和搜索等操作的. Ext.data.Store中有一个Ext.data.Record数组,所有数据都存放在这些Ext.data. Record实例中,为后面的读取和修改操作做准备. Ext.data.Store的基本用法 在使用之前,首先要创建一个Ext.data.Store的实例,如下面的代码所示. var data = [ ['boy',

jQuery 中 data 方法的实现原理

前言:jQuery 作为前端使用最多最广泛的 JS 库,其源码每个 JSer 都应该研究一下.早就打算看却一直被各种事拖着,上次某公司面试时被问到 jQuery 中 data 方法是如何实现的,结果答不上来懊悔不已.现在终于下决心开始看 jQuery 的源码,就从 data 方法开始.本人也是前端新手,如果文章中有理解不当或者错误之处,欢迎留言指出,3Q~ jQuery 版本为 1.8.2 data() 的使用方法 // 向一个 dom 元素绑定数据 $("#header").data

为什么Extjs继承Ext.data.Store不起作用

为什么Extjs继承Ext.data.Store不起作用:引起继承不起作用的原因可能是多种多样的,下面就分析其中的一种,或许能够对有类似情况的有所帮助. DocStore = Ext.extend(Ext.data.Store,{ initComponent:function(){ this.proxy = new Ext.data.HttpProxy({url:this.url}); this.reader = new Ext.data.JsonReader( { totalProperty:

转: Ext.data.Store 修改Post请求

Extjs 4.0版本 var Store = Ext.create('Ext.data.Store', { pageSize: pageSize, model: 'Ext.data.Model名称', autoLoad: false, proxy: { type: 'ajax', url: '请求路径', //actionMethods: 'post', getMethod: function(){ return 'POST'; },//亮点,设置请求方式,默认为GET reader: { t

关于JQuery中$.data绑定数据原理或逻辑

问题: JQuery中,对于.data([key],[value])函数,当使用其进行数据绑定时,假设要绑定的数据是“引用数据类型”,也就是对象:那么.data函数绑定的是该对象的副本还是该对象的一个引用?下面通过以下小例子来测试下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Test<