从一家商店动态创建多个Sencha ExtJS商店

问题描述:

我开发了一个包含单个商店和网格的页面以显示来自数据库查询的项目。该简介已经扩展到包含通过拖放动态分组网格中的项目。从一家商店动态创建多个Sencha ExtJS商店

已经决定通过在客户端创建多个存储和网格来执行此功能,以便单个GET请求提供网格的所有条目。

当初始“主存储器”已被加载时,加载函数遍历“主存储器”中的数据并创建新的存储器(樱桃提取出所述存储器的记录)以及每个存储器的新网格。网格将具有从内容动态生成的标题,但将具有简单的标识来表示数据库中的组。

然后,用户根据需要将物品从每个网格拖放到其他网格中,从“旧”商店中删除商品并在“新商店”中创建商品,并且这样做也会更改其组ID。

用户还可以创建新的组,这些组生成空白商店和伴生网格。

一旦进行了更改,“主存储器”就会被清除出数据,然后每个存储器再聚合回“主存储器”,然后正常进行同步。

我相信在创建商店和网格后,我可以将它们链接在一起并将它们与其他商店/网格区分开来,但我不知道如何获得独特的从“主商店”到每个儿童商店的数据。

这是正确的方式来看待这个?其目的是为了避免同一商店的多个实例和应用过滤器,因为这不一定会对组标识进行任何更改,并避免多个商店来保持向服务器查询单个请求的开销。

如果它是(至少是“a”,如果不一定是“the”)正确的方式来做到这一点,我应该如何从“主店”设置新店中的数据?我假设我可以迭代“主存储器”中的记录,分配给一个数组,并以某种方式将该数组作为数据源应用,但如前所述,我不知道如何执行此操作。

实施例模型和商店代码:

Ext.define('ConfirmationModel', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     'GroupName', 
     'ItemType', 
     'ItemTypeId', 
     'JobNo', 
     'ItemNo', 
     'Thickness', 
     'Cutter', 
     'CutterId', 
     'Source', 
     'Qty', 
     'Material', 
     'MaterialId', 
     'Type', 
     'TypeId', 
     'Work', 
     'WorkId', 
     'InternalFinish', 
     'ExternalFinish', 
     'Notes', 
     'Documented?', 
     'ImportDate', 
     'ImportCheck' 
    ] 
}); 

confirmationStore = Ext.create('Ext.data.Store',{ 
    id: 'confirmationStore', 
    model: 'ConfirmationModel', 
    autoLoad: true, 
    proxy: { 
     // load using HTTP 
     type: 'ajax', 
     url: '<?= $site_url ?>Production/ConfirmationJSON/<?php echo $job_no ?>', 
     pageParam: false, //to remove param "page" 
     startParam: false, //to remove param "start" 
     limitParam: false, //to remove param "limit" 
     noCache: false, //to remove param "_dc" 
     reader: { 
      type: 'json', 
      model: 'ConfirmationModel' 
     } 
    }, 
    groupField: 'GroupName' 
}); 

编辑:

我有一个“主存储”,并在其中,每一行将具有组名,例如(为了简洁)“组1' ,‘2组’等。我需要制作,从‘主店’,还存储,每一个看起来像:然后

group1Store = Ext.create('Ext.data.Store',{ 
    id: 'Group 1', 
    model: 'ConfirmationModel', 
    autoLoad: false, 
    proxy: { 
     // load using HTTP 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

group2Store = Ext.create('Ext.data.Store',{ 
    id: 'Group 2', 
    model: 'ConfirmationModel', 
    autoLoad: false, 
    proxy: { 
     // load using HTTP 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 
... 
group#Store = Ext.create('Ext.data.Store',{ 
    id: 'Group #', 
    model: 'ConfirmationModel', 
    autoLoad: false, 
    proxy: { 
     // load using HTTP 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

这些商店将只包含与该组的记录。我的想法是首先遍历“主存储”并将所有唯一组名称检索到一个数组,然后为每个组名称创建一个数组,然后从“主存储”中仅推送其组名匹配的记录。

从那里创建一个多维数组,首先保存组名,然后为该组名记录数组,然后生成存储并设置名称/ id/storeId = group [0]和data = group [ 1]。也许是啰嗦,但应该生成所有需要的商店,而不管组数。

由于这个问题的主要目的是分组信息插入到一个SQL数据库,我概述了我是如何工作围绕分组问题:

首先,我检索最新的组ID从数据库中为部分检索项目的初始信息进行确认。

作为执行分组的一部分,我为分组ID添加了一个附加列;这顺序增加了组ID,并将其应用于每个项目,使每个项目成为“一个组”。当我执行分组操作时,我只是增加分组ID并将其应用于所有分组项目的分组ID。

我认为我在这个问题中想到的方法与分组ID的简单增加相比是非常笨重的。这个想法可以被细化以遍历每一个将信息提交给服务器的项目,并确保分组id之间没有间隔,但是为了我的目的,简单地增加价值的作用。

createStoreClone: function(sourceStore){ 
     var targetStore = Ext.create('Ext.data.Store', { 
      model: sourceStore.model 
     }); 
     var records = []; 
     Ext.each(sourceStore.getRange(), function(record){ 
      if(your_condition){//push record to array when condition is true 
       records.push(record.copy()); 
     }); 
     targetStore.add(records); 
     return targetStore; 
    } 

在您的主店的加载事件中使用此功能。希望这是有道理的!

+0

这似乎没有从一个商店中创建多个商店;它似乎只是一个。我会更新我的问题,尝试更好地了解我的要求。 –

+0

你必须多次调用这个函数[你想创建的子商店的数量]。但是你可能不得不根据你的需求改变if条件(可以作为另一个参数传递给这个函数)。希望它能解决你的问题。 – Rajinder