2015-08-26 51 views
2

我創建了一個數據庫驅動的層次結構表,有3個層次結構級別。它幾乎完全符合我的要求,但驅動其功能的JavaScript代碼是醜陋的。我想重新寫一些,但我不太清楚。我想我必須使用遞歸函數,但是有一些奇怪的商業規則可能會讓它比我想象的更加困難。你能提出一些建議來簡化我現在的代碼(特別是ActivateRow()函數)嗎?見fiddle層次表 - 通過JavaScript激活行?

注意,有一些時髦的使用中因的ASP.NET Web隱藏字段形式回傳和丟失的輸入值,但也有寫進HTML一些有用的數據屬性,如data-region-iddata-subregion-iddata-market-iddata-hierarchy-id。主要要求如下:

  • 有兩個表 - 第一個被鏈接到第二個,所以在第一個表,所有行動都應在第二個表來進行,以及(儘管第二個表略有不同)。
  • 三層次的層次結構。最高級別(Region),中級(Sub Region)和最終級別(Market)
  • 行激活啓用給定行中的所有控件。如果激活的行是子區域行,則會禁用其父區域行控制,並且其銷售額值總計爲區域級別。這不適用於激活市場行。
  • 同樣,行停用應該禁用並清除該行內的所有控件。如果該行是父行,則應清除所有子行,並禁用其控制。
  • 取消激活父行的所有子項應禁用父行並清除所有父行控制。

當然,還有更好的選擇。我是否重新發明了輪子?有沒有什麼我可以用來改善我的意大利麪代碼?我意識到這不是Q &格式的最佳問題 - 是否有其他地方我應該問我的問題?

+2

你應該嘗試http://codereview.stackexchange.com/ –

+0

謝謝,我以爲這是不是要問最好的地方,但不知道該子域。 – TimeBomb006

+0

請注意,Code Review *需要*將代碼嵌入到問題中。此外,我建議您使用Stack Snippets(Ctrl + M)而不是小提琴,以便代碼可以在現場運行而不是依賴第三方。 –

回答

1

這是不完全清楚你在做什麼,但從我收集你有某種你正在過濾的表。

此外,您正在使用ASP.NET webforms ....很抱歉。

我不會使用ASP WebForms提供的任何類型的表單綁定控件,因爲它現在已經過時,不正確並且非常痛苦。

相反,創建一個支持AJAX頁面[WebMethod]返回所有的數據或參數,什麼都在JSON過濾(因爲JSON是更容易閱讀和調試,而且比XML快很多)

圍棋和找到jQuery插件DataTables。功能的各種功能都是內置的,可擴展性強,功能強大,客戶端效率高,具有多種過濾和搜索功能。

您可以在服務器端創建新模型並重新映射數據服務器端,或者轉儲現有模型並重新映射到客戶端,無論哪種方式,只需將JSON數據插入到datatables即可。

保存回webforms稍微有點棘手(與MVC/Razor相比),因爲必須將字符串取出並將其反序列化到您的模型中,但是我會一直這樣做,您可以繼續與您的業務邏輯。

enter image description here

+0

是的,我在一個Web表單應用程序中創建了這個單一的用戶控件,並且對它的每一秒都感到後悔。現在,我執行存儲過程來獲取模型,並使用.NET中繼器從數據庫中寫出行,包括所有隱藏字段和HTML5數據屬性。感謝您的參考,我熟悉DataTables,但只用於簡單的排序和過濾。我目前正在研究DataTable層次結構(http://datatables.net/examples/api/row_details.html),但還有一些額外的要求可能會導致難以完全重寫。 – TimeBomb006