【发布时间】:2012-09-19 04:22:50
【问题描述】:
我正在尝试弄清楚如何在不保留旧参考的情况下克隆 Ext.data.Store。
让我用一些代码更好地解释一下。这是源存储:
var source = Ext.create ('Ext.data.Store', {
fields: ['name', 'age'] ,
data: [
{name: 'foo', age: 20} ,
{name: 'boo', age: 30} ,
{name: 'too', age: 10} ,
{name: 'yoo', age: 80} ,
{name: 'zoo', age: 30}
]
});
下面是我想做的一个例子:
var target = source;
target.removeAll ();
// Here I need to have target empty and source unchanged
// But in this case, source is empty as well
现在,在上面的示例中,复制是通过引用完成的,而我需要通过值来完成。
所以我在文档中找到了Ext.clone (),但它似乎不适用于复杂的对象,比如Ext.data.Store:
var target = Ext.clone (source);
target.removeAll ();
// source is still empty
然后我尝试使用Ext.data.Model.copy (),但唯一可行的方法是:
var target = Ext.create ('Ext.data.Store', {
fields: ['name', 'age']
});
source.each (function (model) {
target.add (model.copy ());
});
现在,出于我的原因,我不想实例化另一个Ext.data.Store,所以我想避免这种情况:
var target = Ext.create ('Ext.data.Store', {
fields: ['name', 'age']
});
我想要这样的东西:
var target;
source.each (function (model) {
target.add (model.copy ());
});
但是,显然,它不起作用。
那么,如何克隆源存储?
【问题讨论】:
-
我认为没有办法复制商店。实例化一个新的空的可能是您唯一的选择。
-
您介意解释一下为什么要克隆您的商店吗?
-
因为我需要将一些数据表示到网格中。我正在为复杂的嵌套 XML 数据库使用 MVC 和复杂的模型关联。我正在寻找与定义新商店不同的东西,如果可能的话。
标签: javascript extjs model extjs4 store