我有一个用户控件组,并在控件内定义了javascript。在一个页面中,我有两个这样的控件,它们独立工作。渲染的javascript类似于下面的内容:
//control 1
var Groups = (function () {
var obj = {};
obj.selectedid = 2;
return obj;
}());
//control 2
var Groups = (function () {
var obj = {};
obj.selectedid = 2; //it is different here, to keep it simple i just hardcoded as '2'
return obj;
}());
有人可以告诉我如何访问页面上的第一组变量(控件)。我认为像Groups [0]这样的东西会给我结果,但事实并非如此。
感谢您的回复。非常感激。我要添加更多信息要清楚。用户控件包含双列表框,用户可以从list1添加/删除值到list2。所以我将所有这些逻辑封装如下。
var Groups = (function () {
var obj = {};
obj.selectedid = 2;
//some local functions for internal operations such as
function moveGroups(source, target){
}
//there are public functions to initialize this control or to add groups as below
// Groups can be added from external page by calling Groups.AddGroups(data);
obj.AddGroups = function(data) {
//refers to local variables and functions and adds data to listboxes
};
return obj;
}());
问题是我在页面上有两个这样的组控件。 Group1包含自己的双列表和类似的Group2。现在,我需要访问两个对象的AddGroups函数,例如来自页面的Groups1.AddGroups(data)或Groups2.AddGroups(data)。
我已经解决了以下问题。
var Groups = Groups || []; //Check object already exists
Groups.push(
//kept all the existing code here...
(function () {
var obj = {};
obj.selectedid = 2;
//some local functions for internal operations such as
function moveGroups(source, target){
}
//there are public functions to initialize this control or to add groups as below
// Groups can be added from external page by calling Groups.AddGroups(data);
obj.AddGroups = function(data) {
//refers to local variables and functions and adds data to listboxes
};
return obj;
}())
);
现在在我的页面中,我引用了:
Groups[0].AddAvailGroups();
Groups[1].AddAvailGroups();
答案 0 :(得分:0)
如果这两个片段都声明了全局( EVIL )变量Groups
,则在调用第二个匿名函数后,第一个对象将永远丢失。这很简单,我很害怕。如果它们不是全局变量,并且是不同范围的一部分,那么访问该属性是一件简单的事情:
Groups.selectedid;//will be either 1 or 2 depending on the scope.
groups的值是对obj
对象的引用,匿名函数被立即声明和调用(闭包),并返回一个对象,selectedid
作为属性。因此Group
具有该属性。如果您的代码类似于以下内容,则Groups[0]
会起作用:
var Groups = (function()//assign return value
{
return [2];//return this value
})();//call the function
答案 1 :(得分:0)
您需要提供两个不同的名称:
var Groups1 = ...
var Groups2 = ...
之后,您可以访问Groups1.selectedid
但我不清楚这些对象和变量的目的是什么。
答案 2 :(得分:0)
通过
Groups.selectedid
但如果它在相同的代码中,则无法工作,因为您为相同的变量分配了不同的值。你需要分开:
var Groups1 = ...
var Groups2 = ...
答案 3 :(得分:0)
您应该在控件内为应该引用组的js变量生成GUID(这可以是控件的id加上一些前缀)。 并用它们创建全局数组。在这种情况下,您可以随时访问您的群组
答案 4 :(得分:0)
两个var Groups
声明定义了相同的内存位置。
所以你的第二个陈述
//control 2
var Groups = (function () {
将覆盖先前存储在Groups变量中的值。
如果要将群组作为集合进行访问,则应明确执行此操作:
var Groups = []; // array/list;
Groups.push( ... ); // control 1
Groups.push( ... ); // control 2