我有多個網格顯示基於給定過濾器的數據(在使用REST API的Web應用程序中)。顯示的數據結構始終相同(以簡化問題),但取決於用戶所在的屏幕,顯示的結果不同。如何禁用網格中的元素
另外,這是問題,必須禁用某些結果以便用戶不能選擇它們。
示例:Foo有N個小節。如果我想向父親(foo)添加一個新的孩子(小節),我會轉到搜索屏幕,但是我想將過濾後的網格顯示爲已經與父親相關的殘疾兒童。
目前我做細節控制服務器(數據庫querys)在這個問題上根據情況和「禁用」的結果,我不想加入。但是這種方法導致我無法重用查詢(由於具體連接,也許我需要搜索酒吧int順序與其他父親巴茲關聯,並且我想禁用已經與當前父親有關的酒吧......)
另一個辦法可以是以下幾點:
- 保存在內存中(JavaScript的)
- 與父親在數組中的「預渲染」電網事件(或類似)檢查每個元素是否與孩子(僅IDS)它是否包含在前面的數組中(通過id搜索)。如果是這樣,請將其標記爲禁用(例如)。 這是客戶端的可重用解決方案,我總是可以在服務器端重複使用相同的查詢。
在開始實施此解決方案之前,我想知道是否有更好的選擇。 我相信這是一個反覆出現的問題,我不想重新發明輪子。
任何策略或建議?
編輯:秀例如:
假設這種模式:
Category N:M Item
SalesPromotion N:M Item
我有兩個不同的畫面:一個顯示項目屬於一類,另一個顯示項目屬於一個銷售推廣。在每個屏幕中,我可以搜索項目並將其添加到類別或SalesPromotion。但是,當我搜索項目時,我希望已屬於Category/SalesPromotion的項目顯示爲已禁用(爲簡化起見,本示例中未顯示)。 我可以在服務器做到這一點,在做查詢這樣的:
-- Query for search Items in Category screen
SELECT * FROM ITEMS i
LEFT JOIN ItemsCategories ic on ic.ItemId = i.ItemId
WHERE ic.CategoryId IS NULL OR ic.CategoryId <> @CurrentCategoryId
-- Query for search Items in SalesPromotion screen
SELECT * FROM ITEMS i
LEFT JOIN ItemsSalesPromotions isp on isp.ItemId= i.ItemId
WHERE isp.PromotionId IS NULL OR isp.PromotionId <> @CurrentPromotionId
你可以想像,如果我有更多的場景像這些發生的事情(更復雜的模型和過程的查詢)。
一種選擇可能是:
已屬於在內存中當前的分類/ SalesPromotion(JavaScript中,客戶方)- 存儲項目。
- 在客戶端的網格預渲染事件(或同等事件)中確定必須禁用哪些項目(通過搜索存儲項目中的每一行)。
所以,我的問題是wheter這種做法是一個很好的解決方案或者是有這個問題(我是這麼認爲的)一個衆所周知的解決方案。
如果您將數據發送到客戶端並動態禁用它,您無法讓客戶端忘記該數據。服務器端授權必須告訴您可以看到哪些數據。客戶端也可能會看到所有行。 – ntohl
你能提供更多關於你實際想要達到的信息嗎?我認爲你正在接近這個錯誤。 無論如何,您只需發送過濾器選項並在服務器端再次查詢,而不必禁用客戶端中的項目。 – Mightee
@Mightee目前我是這樣做的:發送過濾器選項並在服務器中查詢。但是這樣我有多個不同的查詢。我想有一個查詢並在不同的場景中重複使用它。這就是爲什麼我想在客戶端禁用物品的原因。我將編輯我的問題以示例 –