2009-07-16 47 views
0

我有一個用戶控件包含的JavaScript交互控制

  • 下拉
  • 的佔位符

在運行時,佔位符將與一些用戶控件B.

填充

有某些時間,我需要陷阱的JavaScript onchange事件在下拉以調用在B中的javacript函數(做B的客戶機側更新)。如何做到這一點,一個好的設計/實踐是什麼?

用簡單的方式是使ASP:下拉列表公共成員然後發送到B的公共方法:

// In controlling code 
... 
userControlB.Initialize(userControlA.TheDropDownList); 
... 


// In usercontrol B 
public void Initialize(DropDownList dropdownFromA) 
{ 
    dropdownFromA.Attributes.Add("onchange", "myBfunction()"); 
} 

但一些難聞這種方法。我想保持A和B儘可能鬆散耦合。任何更好的想法?

回答

3

爲了讓他們真正脫鉤,你可以引入一個觀察者模式,例如描述here。我會下拉註冊它自己的更改事件,通知觀察者發生了更改。然後,如果客戶有任何其他控制方式感興趣,他們將在獲得特定觀察結果時徵得通知。

編輯

那麼你能說出基於對觀測的邏輯名稱的變量,那麼你只檢查,以確保觀察者用它註冊之前就存在。

我見過的一個不同的系統使用起來更像是一個事件調度器,基本上當你訂閱你爲事件提供一個名字時,那麼你激發你將包括兩個參數事件的名稱和數據事件。在這個模型中,你只會在頁面上有一個調度器。

+0

+1我想保持你的asp.net解耦控制是至關重要的,尤其是在客戶方的腳本。當您更新應用程序時,節省大量時間和調試(閱讀Money:P)。 – Phil 2009-07-16 14:33:58

0

內DOM我相當肯定,所有的控制都可以訪問,從而使得下拉公衆是不是真的相關,特別是控制和控制b是在同一個頁面的成員,所以對彼此的訪問代碼隱藏。

我會覺得更鬆散耦合的方式將具有控制寄存器B是方法上的控件的change事件的事件偵聽器。我不確定有多少鬆散耦合,你可以製作兩個控件,其中一個依賴於另一個控件的更改。