2014-02-06 121 views
1

我開發了一個包含單個商店和網格的頁面以顯示來自數據庫查詢的項目。該簡介已經擴展到包含通過拖放動態分組網格中的項目。從一家商店動態創建多個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]。也許是囉嗦,但應該生成所有需要的商店,而不管組數。

回答

0

由於這個問題的主要目的是分組信息插入到一個SQL數據庫,我概述了我是如何工作圍繞分組問題:

首先,我檢索最新的組ID從數據庫中爲部分檢索項目的初始信息進行確認。

作爲執行分組的一部分,我爲分組ID添加了一個附加列;這順序增加了組ID,並將其應用於每個項目,使每個項目成爲「一個組」。當我執行分組操作時,我只是增加分組ID並將其應用於所有分組項目的分組ID。

我認爲我在這個問題中想到的方法與分組ID的簡單增加相比是非常笨重的。這個想法可以被細化以遍歷每一個將信息提交給服務器的項目,並確保分組id之間沒有間隔,但是爲了我的目的,簡單地增加價值的作用。

1
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