2013-07-09 47 views
1

所以說我有一家商店,而在我的數據庫中我有20,000,000行。 (足夠了,以便我設置頁面大小,以便每頁只返回100行)。由於我已經設定了頁面大小,所以當我進行原始通話時,我只收回100個項目。因此以下返回空:ExtJS 4.2:從遠程存儲加載單個項目

Ext.getStore('MyLargeStore').getById(200); // returns null 

這對我來說是有道理的,因爲從技術上講,JS方面的商店沒有特定的id集。但是,如果該ID不存在,是否有強制查找?從我可以告訴我已經做了一切「遠程」和需要它在我的商店「自動」:

Ext.define('MyApp.store.MyLargeStore', { 
extend: 'Ext.data.Store', 

requires: [ 
    'MyApp.model.MyLargeModel' 
], 

constructor: function(cfg) { 
    var me = this; 
    cfg = cfg || {}; 
    me.callParent([Ext.apply({ 
     autoLoad: true, 
     autoSync: true, 
     model: 'MyApp.model.MyLargeModel', 
     remoteFilter: true, 
     remoteSort: true, 
     storeId: 'MyLargeModel', 
     buffered: true, 
     pageSize: 100 
    }, cfg)]); 
} 
}); 

反正,使其從遠程服務器拉每當一個ID不存在?我似乎無法找到在文檔中的方法(除非我錯過了它,因爲他們的文檔有時難以破譯有時= /)

另外,我假設你總是可以在商店上做一個負載,但我很確定,如果我只加載那一行,那麼所有其他使用該商店的位置也只會有該行(我不一定要這樣做)。因此理論上,創建一個商店是我唯一的選項?似乎應該有一個更簡單的方法,因此我想我會問。必須有一些更好的方法,而不是創建一個商店,然後從該新商店獲取記錄...

回答

1

你在這裏要做的是錯誤的方法來解決問題。您需要退回到您需要的行,並使用您嘗試查找的行的ID對服務器進行獨立的ajax調用。然後,服務器將在數據庫中查找單個行,然後返回數據爲您需要的行創建模型。這個邏輯應該獨立於商店完成。

+0

這將是我通常做的(做一個方面ajax調用),但我認爲ExtJS會有一些方法來爲我打電話。是不是這樣,或者我會通過模型來做獨立呼叫? (或者我真的需要創建一個側面的AJAX調用來獲得單行?)[我試圖儘可能保留ExtJS/Architect中包含的所有內容,因此我試圖採用這種方法] –

+0

你在這裏試圖做的是超出了商店設計的範圍。我可以在高設計級別看到您認爲它可能具有此功能的位置,但是當您瞭解商店與服務器交互方式的代碼時,它並不是爲此設計的。 – Reimius

+0

我的理解,但我的問題,然後變成會經歷一個模型更好,或者我應該直接打一個Ajax調用我的服務器,並從那裏抓取數據? (PS感謝您的幫助btw = D) –