2

我试图理解 RadWindow/RadWindowManager 关系。我看到可以在一页中定义许多 RadWindowManager 控件(与需要一个实现的 RadScriptManager/ScriptManager 不同)。但我也看到我们可以在 RadWindowManager 内部或作为独立控件实现 RadWindow。

除了能够将管理器上定义的设置应用到窗口之外,使用 RadWindowManager 的优点是什么?将 RadWindowManager 保留在母版页之外并在需要的地方定义它更好,还是保留全局 radwindowmanager 并将 radwindow 作为独立控件更好?

谢谢。

4

2 回答 2

4

我刚刚在 Telerik 的论坛中回答了您的论坛主题,但为了方便起见,我将我的回复粘贴在下面,作为 Kevin 回复的补充。

基本上,RadWindowManager 背后的想法是允许用户在客户端上创建多个具有预定义属性的 RadWindows,并在管理器中设置。管理器的客户端 API 允许开发人员轻松获得对此类 RadWindows 的引用并使用它们进行操作。但是,在使用 RadWindowManager 时应牢记几件事。

1.. 如果您在同一页面上有多个 RadWindowManager:

 All RadWindowManager's functions (radopen, radalert, radconfirm, radprompt, GetRadWindowManager, etc) are always using the first rendered RadWindowManager on the page.
 Every RadWindowManager "knows" only the RadWindows that are declared in its Windows collection.

这意味着如果您将 RadWindow2 作为独立控件或在 RadWindowManager2 中声明,并且您使用类似 radopen(myUrl, "RadWindow2"); 之类的东西,则 radopen 将使用 RadWindowManager1 并使用从 RadWindowManager1 获取的设置打开一个新的 RadWindow。为避免该问题,当您在一个页面上有多个管理器时,您需要首先获取对正确 RadWindowManager 的引用,然后调用其方法。例如 var manager = $find("<%= RadWindowManager2.ClientID %>"); manager.open(myUrl, "RadWindow2");

2.. RadWindowManager 无法控制独立的 RadWindow 控件 - 它们是独立的控件,不受管理器设置的影响。

于 2011-05-20T09:57:02.080 回答
2

使用 RadWindowManager 是为页面上的多个窗口声明公共属性的一种简便方法。您可以在 RadWindowManager 中声明多个 RadWindow 控件,然后通过以下函数访问窗口集合:

var windowManager = $find('<%= MyRadWindowManager.ClientID %>'),
    windows = windowManager.get_windows(),
    wnd,
    i = 0;
for (; i < windows.length; i++) {
    wnd = windows[i];
    // do something with the RadWindow object
}

注意不要调用 RadWindow 变量“window”,因为它会与全局window对象冲突。

如果你想要一个特定的 RadWindow 对象,你可以使用下面的代码:

var windowManager = $find('<%= MyRadWindowManager.ClientID %>'),
    wnd = windowManager.getWindowByName("MyWindow");
// do something with the RadWindow object

或者,我更喜欢在我的母版页中定义一个单独的 RadWindowManager,没有定义任何窗口,然后简单地使用它来根据需要动态打开窗口。这是一个例子:

<telerik:RadWindowManager ID="MasterWindowManager" runat="server" 
    VisibleOnPageLoad="false"
    VisibleStatusbar="false" 
    Behaviors="Close, Move" 
    DestroyOnClose="true" >
</telerik:RadWindowManager>

在您的 Page 上定义一个 RadWindowManager 将向radopen全局window对象添加一个函数。您可以根据需要使用它来动态打开新的 RadWindows...

var showCustomerDetails = function (customerId) {
    var url = String.format("/Views/CustomerDetails.aspx?cid={0}", customerId),
        wnd = window.radopen(url);
    wnd.set_modal(true);
    wnd.setSize(600, 400);
    wnd.show();
    wnd.center();
}

我希望这会有所帮助。

于 2011-05-17T16:14:38.103 回答