我在用户控件中包含一个JS文件.主机页面具有用户控件的多个实例.
JS文件有一个全局变量,用作JS函数的标志.我需要将此变量的范围限制为用户控件.不幸的是,当我有多个控件实例时,会覆盖变量值.
在这样的情况下,推荐的方法是什么?
解决方法
我建议重构你的代码,使所有常见的JS逻辑存储在一个地方,而不是存储在每个UserControl中.这将大大减少页面大小.
您可以将UserControl的id传递给常用的JS方法,以区分UserControl.
对于限制’UserControl’变量范围的问题,您可以存储某种键/值结构以保持您的UserControl特定值 – Key将是UserControl clientID,并且值将是您的变量对此很感兴趣.
例如:
var UCFlags = new Object(); //set the flag for UserControl1: UCFlags["UC1"] = true; //set the flag for UserControl2: UCFlags["UC2"] = false;
要访问它们,只需将UserControl的ClientID传递给UCFlags数组:
myFlag = UCFlags["UC1"];
在服务器端,您可以用常量字符串“UC1”或“UC2”替换
<%= this.ClientID %>
像这样:
myFlag = UCFlags["<%= this.ClientID %>"];
您仍然可以使用<%= this.ClientID%>这里的语法虽然JS的大部分都在一个单独的文件中;简单地说
UCFlags["<%= this.ClientID %>"] = value;