我在用户控件中包含一个JS文件.主机页面具有用户控件的多个实例.
JS文件有一个全局变量,用作JS函数的标志.我需要将此变量的范围限制为用户控件.不幸的是,当我有多个控件实例时,会覆盖变量值.
在这样的情况下,推荐的方法是什么?
一些选项是基于用户控件的ClientId动态生成javascript.例如,您可以动态生成全局变量.
另一个选项,我建议将一个全局变量和函数封装在一个对象中,然后你的用户控件可以发出JS来创建该对象的一个实例(可以动态命名,从而让你根据自己的需要调整对象的范围).
我没有可以共享的工作代码示例,但是我已经以不同的方式完成了这个.最简单的方法是在用户控件的标记中执行此操作.
<script language='javascript'>
var <%=this.ClientID%>myObject=new myObject();
</script>
Run Code Online (Sandbox Code Playgroud)
假设你的控件有一个myControl的clientId,这将创建一个变量myControlmyObject.
另一种方式做,这将是产生在后面的代码,你可以用它注册脚本:Page.ClientScript.RegisterStartupScript().
我建议重构您的代码,以便将所有常见 JS 逻辑存储在一个位置,而不是存储在每个 UserControl 中。这将大大减少页面的大小。
您可以将 UserControl 的 id 传递给常见的 JS 方法来区分 UserControl。
对于限制“UserControl”变量范围的问题,您可以存储某种键/值结构来保留 UserControl 特定的值 - 键将是 UserControl clientID,值将是您设置的变量。有兴趣.
例如:
var UCFlags = new Object();
//set the flag for UserControl1:
UCFlags["UC1"] = true;
//set the flag for UserControl2:
UCFlags["UC2"] = false;
Run Code Online (Sandbox Code Playgroud)
要访问它们,只需将 UserControl 的 ClientID 传递到 UCFlags 数组即可:
myFlag = UCFlags["UC1"];
Run Code Online (Sandbox Code Playgroud)
在服务器端,您可以将常量字符串“UC1”或“UC2”替换为
<%= this.ClientID %>
Run Code Online (Sandbox Code Playgroud)
像这样:
myFlag = UCFlags["<%= this.ClientID %>"];
Run Code Online (Sandbox Code Playgroud)
即使大部分 JS 位于单独的文件中,您仍然可以在此处使用 <%= this.ClientID %> 语法;只需设置
UCFlags["<%= this.ClientID %>"] = value;
Run Code Online (Sandbox Code Playgroud)
在调用嵌入 JS 文件之前。
| 归档时间: |
|
| 查看次数: |
6861 次 |
| 最近记录: |